Zliczanie impulsów w At90S2313

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
krzych230
-
Posty: 9
Rejestracja: 14 gru 2005, 18:11
Lokalizacja: Zgorzelec

Zliczanie impulsów w At90S2313

Post autor: krzych230 » 14 maja 2006, 10:55

Witam

Mam takie pytanie... Jakie muszą być spełnione warunki zewnętrznego sygnału taktującego licznik w AT90S2313 żeby zliczał poprawnie ?? Chodzi nie tylko o czestotliwość ale przede wszystkim o kształt sygnału...
Zrobiłem prosty eksperyment :) Do małego trafo podłączyłem jedną diode i opornik, wiadomo ze na oporniku jest tylko jedna połówka sinusoidy. Sygnal z tego opornika podłączyłem do wyścia licznika 16 bitowego skonfigurowanego oczywiscie jako licznik :)

Algorytm programu jest baardzo prosty... Timer 8 bitowy odmierza jakiś tam czas (w moim przypadku 100ms) po czym generuje przerwanie, wtedy licznik 16 bitowy jest zatrzymywany i stan jego rejestru wywalany na LCD :) Program działa ale co jest na wyświetlaczu :)?:)
NP. 37 za chwile 18 czasami pojawi sie 6 lub zero itd.
Czemu tak jest ??

Bede bardzo wdzieczny za pomoc lub jakies sugestie...

POZDRAWIAM, krzych230

yakuza
-
Posty: 38
Rejestracja: 10 sty 2006, 12:59
Kontakt:

Post autor: yakuza » 14 maja 2006, 20:17

A po wyświetleniu, zerujesz ten licznik?

krzych230
-
Posty: 9
Rejestracja: 14 gru 2005, 18:11
Lokalizacja: Zgorzelec

Post autor: krzych230 » 14 maja 2006, 21:50

Oczywiscie ze zeruje....

Dokładnie wyglada to tak, po wejsciu w procedure oblugi przerwania:

- Zatrzymuje licznik 16 bitowy odpowiedzialny za zliczanie impulsów
- Zatrzymuje licznik 8 bitowy odpowiedzialny za czas
- Przenosze wartosc rejestrów licznika 16 bitowego do zmiennej a potem na LCD
- Funkcja czekajaca 500 milisekund
- Zeruje rejestr licznika 16 bitowego
- Zeruje rejestr licznika 8 bitowego
- Start licznika czasu
- Start licznika impulsów

Koniec procedury obslugi przerwania

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 15 maja 2006, 9:04

Może lepiej daj tu program, zamiast tłumaczyć co i jak robisz :idea:

Kapitan_Rzbik
-
Posty: 97
Rejestracja: 20 gru 2005, 10:52

Post autor: Kapitan_Rzbik » 15 maja 2006, 13:44

krzych230 pisze:Jakie muszą być spełnione warunki zewnętrznego sygnału taktującego licznik w AT90S2313 żeby zliczał poprawnie ?? Chodzi nie tylko o czestotliwość ale przede wszystkim o kształt sygnału...

Wszystkie wejścia w procesorach AVR są wyposazone w przerzutnik Schmitta.


________________________

krzych230
-
Posty: 9
Rejestracja: 14 gru 2005, 18:11
Lokalizacja: Zgorzelec

Post autor: krzych230 » 15 maja 2006, 15:34

Kapitan_Rzbik pisze:
krzych230 pisze:Jakie muszą być spełnione warunki zewnętrznego sygnału taktującego licznik w AT90S2313 żeby zliczał poprawnie ?? Chodzi nie tylko o czestotliwość ale przede wszystkim o kształt sygnału...

Wszystkie wejścia w procesorach AVR są wyposazone w przerzutnik Schmitta.


________________________

Sorrki ale moze to bedzie głupie...

Ale nic mi to nie mowi :(

[ Dodano: 15-05-2006, 16:39 ]
Kapitan_Rzbik pisze:
krzych230 pisze:Jakie muszą być spełnione warunki zewnętrznego sygnału taktującego licznik w AT90S2313 żeby zliczał poprawnie ?? Chodzi nie tylko o czestotliwość ale przede wszystkim o kształt sygnału...

Wszystkie wejścia w procesorach AVR są wyposazone w przerzutnik Schmitta.


________________________
TAK WYGLADA MOJ PROGRAM


int main(void)
{


DDRB=0xff;
PORTB=0x03;
DDRD=0x00;
PORTD=0x00;
TCNT1H=0X00;
TCNT1L=0X00;
TIMSK=1<<TOIE0;
sei();

inicjacjalcd();
piszinstrukcje(0x0c);

char *tekst1=PSTR("PREDKOSC");


czysclcd();
pisztekst(tekst1);
TCNT0=0Xf3;
TCCR1B=0x07;
TCCR0=0x04;

while(1);

}


SIGNAL (SIG_OVERFLOW0)
{
TCCR1B=0x00;
TCCR0=0x00;
klawisz=TCNT1L;
lcdxy(1,0);
piszznak(' ');
lcdxy(1,1);
piszznak(' ');
lcdxy(1,2);
piszznak(' ');
lcdxy(1,0);
lcddec(klawisz);
czekaj(500*tau);
klawisz=0;
TCNT0=0Xf3;
TCNT1H=0;
TCNT1L=0;
TCCR1B=0x07;
TCCR0=0x04;

}

Kapitan_Rzbik
-
Posty: 97
Rejestracja: 20 gru 2005, 10:52

Post autor: Kapitan_Rzbik » 15 maja 2006, 19:27

krzych230 pisze:
Kapitan_Rzbik pisze:Kapitan_Rzbik napisał/a:
krzych230 pisze:krzych230 napisał/a:
Jakie muszą być spełnione warunki zewnętrznego sygnału taktującego licznik w AT90S2313 żeby zliczał poprawnie ?? Chodzi nie tylko o czestotliwość ale przede wszystkim o kształt sygnału...
Wszystkie wejścia w procesorach AVR są wyposazone w przerzutnik Schmitta.
Sorrki ale moze to bedzie głupie...

Ale nic mi to nie mowi Sad
Hokus-pokus - bęc! :lol:

http://pl.wikipedia.org/wiki/Przerzutnik_Schmitta

__________________

krzych230
-
Posty: 9
Rejestracja: 14 gru 2005, 18:11
Lokalizacja: Zgorzelec

Post autor: krzych230 » 15 maja 2006, 20:08

Kapitan_Rzbik pisze:
krzych230 pisze:
Kapitan_Rzbik pisze:Kapitan_Rzbik napisał/a: Wszystkie wejścia w procesorach AVR są wyposazone w przerzutnik Schmitta.
Sorrki ale moze to bedzie głupie...

Ale nic mi to nie mowi Sad
Hokus-pokus - bęc! :lol:

http://pl.wikipedia.org/wiki/Przerzutnik_Schmitta





Aaa to o to chodzi z Przerzutnikiem Schmitta.... No tak ten układ znalem, ale nie wiedzialem ze to sie tak nazywa :oops:


Wiec w moim układzie powinno byc wszystko w pozadku ! W uC jest załozenie stanu niskiego w granicach 1V a wysokiego w granicach 4V !!
A u mnie sygnal zmienia sie od 0 do 5,3 V

I jezeli dobrze rozumie przy tak malych czestotliwosciach (50Hz) nie ma znaczenia czy sygnal narasta wolno ... Natomiast przy duzych z wiadomych wzgledow wymagany byl by sygnal prostokatny...

Jezeli sie myle to napisz mi to, bede bardzo wdzieczny...
__________________

Wojtek
Moderator
Posty: 2606
Rejestracja: 04 sie 2002, 19:00
Lokalizacja: --
Kontakt:

Post autor: Wojtek » 15 maja 2006, 20:30

:arrow: krzych230 daj spokój z tymi cytatami bo staje sie to nieczytelne.

krzych230
-
Posty: 9
Rejestracja: 14 gru 2005, 18:11
Lokalizacja: Zgorzelec

Post autor: krzych230 » 15 maja 2006, 21:34

OK :)

ODPOWIEDZ