Skocz do zawartości

Attiny2313, Licznik impulsów i Bascom


greg01

Pomocna odpowiedź

Witam! Pracuję nad podobnym projektem, w moim przypadku zachodzi potrzeba mierzenia częstotliwości sygnałów z hallotronu. Pierwotnie chciałem mierzyć zbocze z czujnika szerokopasmowego za pomocą Timer1 ale okazało się, że czujnik ma zbyt dużą bezwładność i nie nadaje się do pomiarów częstotliwości. Muszę użyć czujnika dwustanowego a Timera0 nie można "wytaktować" poprzez Low Level.

czy komuś udało się zrobić miernik częstotliwości na INT0?

wydaje mi się, że pomiar za pomocą INT0 (Low Level) jest z góry skazany na niepowodzenie, ponieważ utrzymywanie niskiego stanu na INT0 będzie interpretowane jako polecenie ciągłego wykonywania przerwania (przy szerokich przerwach w impulsach przerwanie nie wykona się tylko podczas zmiany stanu na niski a wykona się kilkakrotnie podczas jednego okresu gdy sygnał będzie w stanie niskim). Inaczej jest ze zboczami, gdzie przerwanie zostanie wykonane raz, podczas zmiany stanu.

Po skoku do programu zatrzymać przerwanie INTx (disable)i odczytać ilość zliczonych impulsów z enkodera i zerować zmienną a nastepnie puścić go znowu(enable)

Mówisz o podprogramie obsługi przerwania? a po co w nim blokować przerwania skoro mikrokontroler sam zeruje flagę globalnego zezwolenia na przerwania?

Link do komentarza
Share on other sites

Znalazłem brak w kodzie programu , a dokładnie nie skonfigurowane wyjście INT0.

Program nie działa jeszcze prawidłowo.

Może ktoś sprawdzi ten program na swoim uC .

Kompilator nie widzi żadnych błędów w poprawności składni , lecz program nie działa.

Link do komentarza
Share on other sites

11,0592 Mhz

Dla czego ATTiny2313 taktujesz takim dziwacznym zegarem, spokojnie to na 8MHz zrobić się (F impulsów ~480KHz MAX, znaczy się 480K obrotów/sek).

Inna sprawa, jak to zrobić? Jeżeli nie musisz dekodować kierunku obrotów (w lewo czy prawo) to wystarczy ci zwykły miernik częstotliwości zrobiony na Timer 1, ale powinien on dokonywać pomiaru co 1/4 sek, a to dla tego aby wynik aktualizował się w miarę sensownie. 1sek to jednak strasznie dużo jak na pomiar obrotów, a zakładam że chcesz mieś w miarę dynamiczny pomiar wraz ze zmianą obrotów. Może się okazać że nawet trzeba będzie robić 10 pomiarów na sek.

Ja robiłem licznik impulsów na Tiny2313, ale do maszyny i na LEDach, a konkretnie przerabiałem kit Jabola.

To już jest moja wersja softu, oryginał i tak się do niczego nie nadawał.

Link do komentarza
Share on other sites

Do zliczania ma być używany timer0 i wejscie INT0 lub INT1.

O ile pamiętam to ten układ posiada wewnętrzny rezonator 8MHz wiec można go użyć zamiast 11,0592 MHz. Z preskalerem 64 i wpisywaną wartością 231 wyjdzie przerwanie co 0,2 ms.

Po sprawdzeniu problem nie leży w timerze0 ani w kwarcu tylko w zliczaniu impulsów INT0.

Napisałem prosty program:

Config Lcdpin = Pin , Db7 = Portd.0 , Db6 = Portd.1 , Db5 = Portd.2 , Db4 = Portd.4 , E = Portd.5 , Rs = Portd.6
Config Int1 = Falling
Config Pind.3 = Input

Dim A As Integer
Dim Wynik As Integer

On Int1 Licz
Enable Interrupts
Enable Int1

Wynik = 0
Cls
     Do

     Incr A
         If A = 1000 Then
         Disable Int1
         Lcd Wynik
         Waitms 500
         Wynik = 0
         Cls
         Enable Int1
         End If


  Loop

Licz:
Disable Int1
Incr Wynik
Enable Int1
Return


End

Program zlicza lecz znowu niewłaściwie. Częstotliwość podawanego sygnały zawierała się w przedziale 1 hz do 10 khz. Zmieniałem także szerokość impulsów szukając tam przyczyny.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Wątpię czy w ten sposób to zrobisz, lepiej jednak do tego użyć dodatkowy Timer, który będzie ci zliczał impulsy z zewnątrz w zadanym czasie. Chodzi o to że przerwanie INT może być podatne na zakłócenia (szczególnie w trybie wyzwalania zboczem), możesz popróbować jeszcze go po konfigurować, bo może on reagować na zbocze, lub na stan.

Spróbuj między GND a wejście INT dodać kondensator, taki 10-100pF.

Ostatecznie jeżeli nie możesz użyć do pomiaru innego pinu CPU to użyj Timer0 jako generator do próbkowania programowego tego pinu (portu gdzie jest INT0) z częstotliwością MIN 2,5x większą niż MAX F mierzone, wtedy będziesz mógł wykrywać i zliczać impulsy w miarę pewny sposób.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.