Pomiar czestotliwości...coś nie działa.
Pomiar czestotliwości...coś nie działa.
Napisałem mały program mierzący f na AVR'ku. Jeden timer odmierza czas (1 seknde) a drugi liczy impulsy...testowałem go na detektorze przejscia napięcia sieci przez zero i na innym uC który generował na jednym z pinów impulsy o czasie trwania kilku milisekund (wypełnienie 50%). Gdy był wspomniany miernik był dołączony do tego detektora przejść to wskazywał częstotliwość 100Hz...ale jak był podłączony do tego generatora na innym uC to wskazywał 50Hz, a czasem 53......róznie... Wie ktoś co jest grane? Przecież ten miernik dołączony do tego generatora powinien wskazywać f gróbo powyzej tych 100Hz. Nawet zmieniałem częstotliwość generowanego przebiegu i nic-ciągle 50 albo 53Hz.
-
Arnold_S.
Schematu nie dam bo nie mam...ale jest to standardowe połonczenie dwóch uC albo uC i tego detektora...wszystko wchodzi na pin podlonczony do systemu przerwan AVR'a a reszta to program. Tylko dlaczego mierzy mi te zakłucenia skoro włonczyłem nie tylko wewnętrzny rezystor podciągający wejście ale i próbowałem z zewnętrznym. A dlaczego mi pokazuje 50Hz jeśli na wyściu tego drugiego uC (generatora) są jakieś konkretne stany? A w dodatku po podłonczeniu do tamtego detktora przejścia napięcia sieci przez zero pokazuje 100Hz...a to już nie są zakłucenia tylko konkretne impulsy. Tak więc czym sie ten detektor różni od generatora na uC pod względem generowanych impulsów? Co mam zrobić żeby ten mirnik nie mierzył tych zakłuceń tylko "to co trzeba"?
-
elektronWielki
- Użytkownik
- Posty: 247
- Rejestracja: 30 maja 2006, 12:45
- Lokalizacja: kontownia
-
Arnold_S.
To nie mierzy zadnych przemiennych sygnałow! A niby jak mam do AVR'a podać napięcie jemne jeśli o to Ci chodzi?
Ten detektor przejścia napięcia sieci przez zero to daje na wyjściu napięcia 0V i +5V! To ze jest to detektor to podałem przykładowo!!!! To umówmy sie że jest to pierwszy generator generujący przebiegi o częstotliwości 100Hz (i współczyniku wyenieni nierównym 50% dla dociekliwych) a en drugi generatoro to na AVR'ku , program w nim wygląda tak:
Config Pinb.5 = Output
Config Pinb.4 = Output
Dim A As Byte
Do
Waitms 50
Toggle Portb.5
Incr A
If A = 1 Then
Toggle Portb.4
A = 0
End If
Loop
Dwa wyjścia bo troche eksperymentowałem, z czasami oóźnienie też. Od 1 ms do 100ms. Juz wszystko jasne??? Juz sie sytuacja rozjasnila? Jak nie to co jescze chcecie wiedzieć?
Ten detektor przejścia napięcia sieci przez zero to daje na wyjściu napięcia 0V i +5V! To ze jest to detektor to podałem przykładowo!!!! To umówmy sie że jest to pierwszy generator generujący przebiegi o częstotliwości 100Hz (i współczyniku wyenieni nierównym 50% dla dociekliwych) a en drugi generatoro to na AVR'ku , program w nim wygląda tak:
Config Pinb.5 = Output
Config Pinb.4 = Output
Dim A As Byte
Do
Waitms 50
Toggle Portb.5
Incr A
If A = 1 Then
Toggle Portb.4
A = 0
End If
Loop
Dwa wyjścia bo troche eksperymentowałem, z czasami oóźnienie też. Od 1 ms do 100ms. Juz wszystko jasne??? Juz sie sytuacja rozjasnila? Jak nie to co jescze chcecie wiedzieć?
-
elektronWielki
- Użytkownik
- Posty: 247
- Rejestracja: 30 maja 2006, 12:45
- Lokalizacja: kontownia
Zlokalizowałem błąd ale to nie rozwiązało całkiem sprawy. Podłonczyłem kabelek łączący procki ale...nie podłączyłem masy!!!
Ale dalej coś jest nie tak...po podłączeniu do jednego procka pokazuje stałą czestotliwość tj. ok.1MHz a do drugiego procka z innym progamem pokazuje od 6Hz do 44Hz...a powinno ponad 100-tak wynika z programu.
Aha! Czy na wewnetrznym oscylatorze 8MHz i programie Bascomie:
$crystal = 8000000
Config Portc = Output
Dim A As Byte
Do
Toggle Portc.0
Incr A
If A = 2 Then
Toggle Portc.1
A = 0
End If
Loop
na wyjściu moze mi sie pojawic: na jednym ok.106kHz a na drugim ok. 53kHz?Bo wg. mnie przy częstotliwości ok. 8MHz procesora taka mała pętelka powinna się szybciej wykonywać....FuseBity są dobrze skonfigurowane.
Ale dalej coś jest nie tak...po podłączeniu do jednego procka pokazuje stałą czestotliwość tj. ok.1MHz a do drugiego procka z innym progamem pokazuje od 6Hz do 44Hz...a powinno ponad 100-tak wynika z programu.
Aha! Czy na wewnetrznym oscylatorze 8MHz i programie Bascomie:
$crystal = 8000000
Config Portc = Output
Dim A As Byte
Do
Toggle Portc.0
Incr A
If A = 2 Then
Toggle Portc.1
A = 0
End If
Loop
na wyjściu moze mi sie pojawic: na jednym ok.106kHz a na drugim ok. 53kHz?Bo wg. mnie przy częstotliwości ok. 8MHz procesora taka mała pętelka powinna się szybciej wykonywać....FuseBity są dobrze skonfigurowane.
-
elektronWielki
- Użytkownik
- Posty: 247
- Rejestracja: 30 maja 2006, 12:45
- Lokalizacja: kontownia
to na co czekasz? załóż breakpointy w miejscach zaznaczonych i zasymuluj program
Kod: Zaznacz cały
$crystal = 8000000 Config Portc = Output Dim A As Byte Do >>>Toggle Portc.0 Incr A If A = 2 Then >>>Toggle Portc.1 A = 0 End If Loop
Brekpointy....to znaczy jakieś polecenie oczekiwania? Nie o to mi chodzi. Tylko przy częstotliwości taktowania ok. 8MHz pętla wykonuje sie z częstotliwością 106kHz...czyli 8MHz/106kHz daje ok. 75 cykli zegarowych...czy te instrukcje co napisalem moga zajać rzeczywiście 75 cykli??? A kolejna srawa z tymi niskimi czstotliwościami na innym generatorze: dlaczego one mi skakaja od kilk herców do kilkunastu? Przecież program jest zawsze taki sam:
Do
Toggle Portb.1
Waitms x
Loop
Gdzie x to różne wartości wstawiane przezemnie.
Do
Toggle Portb.1
Waitms x
Loop
Gdzie x to różne wartości wstawiane przezemnie.
-
elektronWielki
- Użytkownik
- Posty: 247
- Rejestracja: 30 maja 2006, 12:45
- Lokalizacja: kontownia
a po co masz to wiedziec? załóż breakpointy i sprawdź w symulatorze w jakim czasie instrukcje sie wykonująDaymian pisze:Tylko przy częstotliwości taktowania ok. 8MHz pętla wykonuje sie z częstotliwością 106kHz...czyli 8MHz/106kHz daje ok. 75 cykli zegarowych...czy te instrukcje co napisalem moga zajać rzeczywiście 75 cykli???