Witam, wymyśliłem generator ("prostokąt") na atmega. W założeniach miałem częstotliwość do 5MHz i wyświetlanie na LCD w Hz. Moje pytanie brzmi czy program jest napisany poprawnie, oraz co należało by zmienić?
$regfile = "m8def.dat" 'Info dla kompilatora.
$crystal = 8000000 'Informujemy kompilator o kwarcu 8MHz.
Config Lcd = 16 * 2 'Konfiguracja Lcd.
Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.5
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'config ADC
Start Adc 'uruchom ADC
Config Timer0 = Timer , Prescale = 1 'Timer0 jako licznik czasu.
Config Pinb.0 = Output 'Port wyjściowy częstotliwości.
Set Portb.0 'Ustaw poziom wysoki na wyjściu Portb.0.
Dim Zm As Word 'Zm, zmienna przerwań Timer0.
Dim Odp As Single 'Odp, zmienna, która będzie zawierać odpowiedź jaka jest częstotliwość..
Dim F As Word 'F, zmienna do umieszczenia w pdprogramie Licz..
On Timer0 Licz 'Podprogram.
Enable Interrupts 'Zezwalaj na wszystkie przerwania.
Enable Timer0 'Odblokuj przerwania Timer0.
Cls 'czyść LCD
Do 'Pętla do wykonania dzielenia i wyświetlenia wyniku.
F = Getadc(0) 'podzielnik F = ADC 0
Home 'Pokazuj w jednym miejscu.
Odp = 5000 / F '5MHz podziel przez liczbę F.
Lcd Odp ; "Hz" 'Pokaż odpowiedź.
Odp = 0 'Zeruj zmienną.
Loop 'Powtórz pętlę.
End 'Koniec pętli.
Licz: 'Podprogram Timer0.
Incr Zm 'Po każdym przerwaniu powiększaj zmienną.
If Zm = F Then 'Jeśli jest tyle przerwań, F, to Toggle.
Toggle Portb.0 'Zmień stan Portb.0.
Zm = 0 'Zeruj zmienną.
End If 'Koniec warunku.
Return 'Wróć do programu.