Chciałbym zbudować generator przebiegu o regulowanej częstotliwości na procesorku. Myślę, że generator taki mógłby mieć nawet niezłą stabilność, dolna granica częstotliwości mogłaby być też całkiem niska, Na górnej mi tak bardzo nie zależy. Wiem, że procesor 80c2051 niezbyt dobrze nadaje się do tego bo wewnątrz dzieli jakoś dziwnie wiele razy częstotliwość kwarcu. Chciałbym zrobić to na procesorku AT90s2313-10 napisałem coś takiego jak poniżej jednak oczywiście nie działa a ja nie mam żadnego pomysłu jak to naprawić Nie znam jeszcze dobrze obsługi timerów i na pewno problem tkwi w niewłaściwym ich wykorzystaniu Bardzo proszę o wszelkie uwagi Chciałbym też wykorzystać dwa przyciski do regulowania tej częstotliwości i też nie mam pomysłu jak.
Dim Cz As Byte
Config Portb = &B01111111
Portb = 01111111
Config Portd = &B00000000
Portd = 11111111
Config Lcd = 16 * 2
Config Timer0 = Timer , Prescale = 1
Enable Interrupts : Enable Timer0
Do
On Timer0 gen
If Pind.1 = 0 Then
Cls : Decr Cz
While Pind.1 = 0
Wend
End If
If Pind.0 = 0 Then
Cls : Incr Cz
While Pind.0 = 0
Wend
End If
Home
Lcd "zmienna = " ; Cz
Loop
End
gen:
toggle portb.0
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięGenerator częstotliwości w Bascomie
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Ja proponuje cos takiego:
Dim Cz As Word 'dzięki temu uzyskasz wiekszy zakres zmian czestotliwosci
Config Portb = &B11111111 'Portb.0 ma być wyjściem
Portb = &b11111111
Config Portd = &B0000000
Portd = &b1111111
Config Lcd = 16 * 2
Config Timer1 = Timer , Prescale = 1
Enable Interrupts : Enable Timer1
On Timer1 Gen
Do
If Pind.1 = 0 Then
Decr Cz
Bitwait Pind.1 , Set 'bitwait zajmuje mniej flasha
End If
If Pind.0 = 0 Then
Incr Cz
Bitwait Pind.0 , Set
End If
cls
Home
Lcd "zmienna = " ; Cz
Loop
End
Gen:
Timer1 = Cz 'im większe będzie cz tym szybciej Timer1 się przepałni i wieksza będzie generowana częstotliwość
Toggle Portb.0
Return
'( minimalna częstotliwosć jaka uzyskasz z prescale = 1 i X = 4MHz to 4000000/65535 = 61Hz
Cz nie moze byc zbyt duza gdyz Wtedy Może Dojść Do Sytuacji że Procesor Sie "zatka" - Bedzie Tak Wtedy Gdy Timer1 Będzie Się
Przepełniał Szybciej Niż Czas Potrzebny Na Wykonanie Procedury Gen
')
Dim Cz As Word 'dzięki temu uzyskasz wiekszy zakres zmian czestotliwosci
Config Portb = &B11111111 'Portb.0 ma być wyjściem
Portb = &b11111111
Config Portd = &B0000000
Portd = &b1111111
Config Lcd = 16 * 2
Config Timer1 = Timer , Prescale = 1
Enable Interrupts : Enable Timer1
On Timer1 Gen
Do
If Pind.1 = 0 Then
Decr Cz
Bitwait Pind.1 , Set 'bitwait zajmuje mniej flasha
End If
If Pind.0 = 0 Then
Incr Cz
Bitwait Pind.0 , Set
End If
cls
Home
Lcd "zmienna = " ; Cz
Loop
End
Gen:
Timer1 = Cz 'im większe będzie cz tym szybciej Timer1 się przepałni i wieksza będzie generowana częstotliwość
Toggle Portb.0
Return
'( minimalna częstotliwosć jaka uzyskasz z prescale = 1 i X = 4MHz to 4000000/65535 = 61Hz
Cz nie moze byc zbyt duza gdyz Wtedy Może Dojść Do Sytuacji że Procesor Sie "zatka" - Bedzie Tak Wtedy Gdy Timer1 Będzie Się
Przepełniał Szybciej Niż Czas Potrzebny Na Wykonanie Procedury Gen
')
Ostatnio zmieniony 22 mar 2004, o 22:21 przez Kamilkozi, łącznie zmieniany 1 raz.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 11 gości