Witam,
Jestem początkującym użytkownikiem Arduino i jest to mój pierwszy post na forum. Przy użyciu Arduino Uno chciałbym stworzyć generator impulsów prostokątnych o zmiennej częstotliwości (regulacja przy użyciu potencjometru, maksymalna częstotliwość ok. 1kHz). Sygnał ten ma być dalej przekazywany do innego mikrokontrolera który będzie zliczał i przetwarzał impulsy.
Chciałbym prosić o porady w kwestii budowy tego typu generatora oraz napisania odpowiedniego programu.
Z góry dziękuję za każdą pomoc.
Dziękuję za podpowiedź. Bazując na powyższych informacjach zbudowałem układ z przykładu z potencjometrem oraz napisałem program:
Kod:
#include "TimerOne.h"
int odczytanaWartosc = 0;//Odczytana wartość z ADC
float czestotliwosc = 0;//Wartość przeliczona na częstotliwość w Hz
void setup() {
pinMode(10, OUTPUT);
Timer1.initialize(1/(2*czestotliwosc)); // initialize timer1
Timer1.pwm(9, 512); // setup pwm on pin 9, 50% duty cycle
Timer1.attachInterrupt(Przerwanie); // attaches Przerwanie() as a timer overflow interrupt
}
void Przerwanie()
{
digitalWrite(10, digitalRead(10) ^ 1);
}
void loop() {
odczytanaWartosc = analogRead(A0);//Odczytujemy wartość napięcia
czestotliwosc = odczytanaWartosc * (800.0/1023.0); //Przeliczenie wartości na czestotliwosc (maksymalnie 800 Hz)
}
Wydaje mi się że dzięki temu na pinie 10 będą pojawiać się impulsy o częstotliwości zadanej na potencjometrze. Prosiłbym jednak o sprawdzenie czy coś takiego ma w ogóle prawo zadziałać, a jeśli nie to co trzeba poprawić.
Wykonałem nieco inny program gdyż nie byłem w stanie doprowadzić wcześniejszej wersji do działania:
Kod:
int odczytanaWartosc = 0; //Zmienna do przechowywania odczytu ADC
float f=0;
void setup() {
pinMode(2, OUTPUT);
Serial.begin(9600);
}
void loop() {
odczytanaWartosc = analogRead(A0);//Odczytanie wartości z ADC
f = odczytanaWartosc * (800.0/1023.0);
Serial.println(f);
digitalWrite(2, HIGH);
delay((1/f)*500);
digitalWrite(2, LOW);
delay((1/f)*500);
}
Wydaje mi się że ta wersja działa, tzn. przy niskich częstotliwościach dioda miga z odpowiednimi odstępami czasu. Mam jednak inny problem. Chciałbym aby drugi mikrokontroler odbierał i zliczał wygenerowane impulsy. Nie do końca wiem jak połączyć oba urządzenia (czy wystarczające będzie tu zwyczajne połączenie kabelkiem pinu 2 generatora z odpowiednim pinem drugiego mikrokontrolera?) oraz jaki program zapisać.
Będę wdzięczny za każdą pomoc.