Генератор на arduino nano.

Вопросы программирования в системе Ардуино
user139
Сообщения: 5
Зарегистрирован: 27 янв 2019, 07:32

Генератор на arduino nano.

Сообщение user139 » 27 янв 2019, 07:51

Мне нужен испытательный генератор для проверки одного прибора. Он должен выдавать вот такую картинку https://yadi.sk/i/PfvFoCdPLIn86A . Что я сделал. Создал массив из булеан переменных на 36 бит. под DATA. Этот массив я буду заполнять руками в нужной мне последовательности. Что дальше пока не знаю прошу помощи. Как выводить эти два сlигнала с ардуинки ? Использовать просто delay наверное не получится. Нужно обеспечить сдвиг между сигналами DATA и CLOCK, нужно добиться нужной скважности сигнала CLOCK. Ну и наверное со скоростью вывода придется поэкспериментировать. Знаний пока мало буду рад если кто поможет.


Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Генератор на arduino nano.

Сообщение Эдуард » 27 янв 2019, 10:27

Здравствуйте!
Какая минимальная длительность импульсов?
И насколько точно надо выдержать временные параметры?

user139
Сообщения: 5
Зарегистрирован: 27 янв 2019, 07:32

Re: Генератор на arduino nano.

Сообщение user139 » 27 янв 2019, 10:38

Что-то в даташите на MM145453V я не увидел этой информации. Сейчас попробую еще раз даташит почитать.

user139
Сообщения: 5
Зарегистрирован: 27 янв 2019, 07:32

Re: Генератор на arduino nano.

Сообщение user139 » 27 янв 2019, 10:46

Clock Input Duty Cycle (2) 40 60 % это скважность ну а дальше время нарастания и убывания сигнала DATA
Data Input Set-Up Time, tDS 300ns
Data Input Hold Time, tDH 300ns
Если только вот частота может говорить о минимальной длительности импульсов
Clock Input Frequency, f
(2)
V
3V (1) (3)CLOCK
DD=
500
kHz
VDD= 5V (1)
750
kHz
V
10V (1)DD=
1
MHz

Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Генератор на arduino nano.

Сообщение Эдуард » 27 янв 2019, 17:11

Программным способом реализовать такие быстрые сигналы на Ардуино возможно только на Ассемблере. Но, насколько я вижу, вам необходимо реализовать передачу данных по протоколу SPI. Попробуйте использовать аппаратный SPI, который есть в Atmega328.

user139
Сообщения: 5
Зарегистрирован: 27 янв 2019, 07:32

Re: Генератор на arduino nano.

Сообщение user139 » 27 янв 2019, 19:46

Да нет там таких скоростей мерил осциллографом 70кГц.

user139
Сообщения: 5
Зарегистрирован: 27 янв 2019, 07:32

Re: Генератор на arduino nano.

Сообщение user139 » 27 янв 2019, 19:52

Вот мне дали код реализующий мою задачу
01
#define clockPin 2
02
#define dataPin 3
03
#define timeSend 2 //время на одну посылку секунд
04
uint64_t data = 0x01;
05
uint32_t times;
06
uint8_t razrjad = 0;
07

08
void setup() {
09
pinMode(clockPin, OUTPUT);
10
pinMode(dataPin, OUTPUT);
11
Serial.begin(9600);
12
times = millis();
13
}
14

15
void loop() {
16
if((millis()-times)>(timeSend*1000))
17
{
18
digitalWrite(dataPin, HIGH); //start
19
strobe();
20
for(uint8_t i=0; i<33; i++) //передача 33 бит данных
21
{
22
if(bitRead(data, i))
23
{
24
digitalWrite(dataPin, HIGH);
25
}
26
else
27
{
28
digitalWrite(dataPin, LOW);
29
}
30
strobe();
31
}
32
digitalWrite(dataPin, LOW); //конец посылки
33
strobe();
34
delayMicroseconds(2);
35
strobe();
36
Serial.write(razrjad); //отправляем в монитор
37
times = millis();
38
data <<=1; //перемещаем 1 в следующий разряд
39
razrjad++;
40
if((data>=0x200000000)||(razrjad>=33)) //если прошли все разряды то заново
41
{
42
data=0x01;
43
}
44
}
45

46
}
47
void strobe ()
48
{
49
digitalWrite(clockPin, HIGH);
50
//delayMicroseconds(1); //возможно понадобится
51
digitalWrite(clockPin, LOW);
52
//delayMicroseconds(1); //возможно понадобится
53
}
Я не все понимаю. Сможете объяснить какая строчка что делает популярно?


Вернуться в «Программирование Ардуино»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость