AVR i błyskająca led

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
fluke2010
-
Posty: 31
Rejestracja: 16 maja 2010, 18:11
Lokalizacja: lubuskie

AVR i błyskająca led

Post autor: fluke2010 » 21 cze 2011, 22:41

witam.

prosty program.

dioda led ma zabłysnąć na 100ms, 1 sekunda przerwy i tak w kolko.



**********************************************************
$regfile = "ATtiny2313.DAT"
$crystal = 4000000

Config Portd = Output
Config Portd = &B1111111
Config Portb = Output
Config Portb = &B00000000



Led Alias Pind.2

Do
Set Led
Waitms 100
Reset Led
Wait 1

Loop
End

**********************************************************************

dioda led pulsuje z częstotliwością 1 Hz
dlaczego tak jest bo nie mogę zrozumieć tego.

pozdrawiam.

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 21 cze 2011, 23:47

fluke2010 pisze:dioda led pulsuje z częstotliwością 1 Hz
dlaczego tak jest bo nie mogę zrozumieć tego.
Bo 100ms + 1000ms = 1100ms. Stad T=1,1s, a f=1/T i w efekcie f = 0,9Hz. Biorąc pod uwagę niedokładność zegara i błąd pomiaru (zwłaszcza organoleptycznego), tyle wyjdzie.

fluke2010
-
Posty: 31
Rejestracja: 16 maja 2010, 18:11
Lokalizacja: lubuskie

Post autor: fluke2010 » 22 cze 2011, 0:10

No tak, podłączyłem oscyloskop i faktycznie 1100ms

Zle rozumuje działanie programu.
Myślałem ze napisany program
1. zapala led
2. czeka 100ms
3. gasi led
4. czeka 1 sek.

pozdr.

Awatar użytkownika
c4v2
Użytkownik
Posty: 426
Rejestracja: 22 lis 2005, 15:14
Lokalizacja: z przed monitora

Post autor: c4v2 » 22 cze 2011, 9:51

Zle rozumuje działanie programu.
Myślałem ze napisany program
1. zapala led
2. czeka 100ms
3. gasi led
4. czeka 1 sek.
Zależy jak ma Pan podłączony LED do nóżki mikrokontrolera.
Jeżeli LED jest połączona katodą do portu (zaświecana masą) to część programu mogła by wyglądać tak:

Kod: Zaznacz cały

Do
  Reset Led
  Waitms 100
  Set Led
  Waitms 1000
Loop 
Natomiast gdy LED jest połączona anodą do portu (zaświecana plusem) to część programu mogła by wyglądać tak:

Kod: Zaznacz cały

Do
  Set Led
  Waitms 100
  Reset Led
  Waitms 1000
Loop 
Jeżeli ma "mrugająca" LED jest tylko konieczna do sygnalizacji optycznej to dokładność "Waitms"
będzie wystarczająca. Jeżeli konieczna jest większa precyzja lub "miganie" LED w "trakcie" wykonywania przez program innych "czynności" to warto odmierzać czas świecenia/nieświecenia w przerwaniach od timera.

fluke2010
-
Posty: 31
Rejestracja: 16 maja 2010, 18:11
Lokalizacja: lubuskie

Post autor: fluke2010 » 22 cze 2011, 13:25

witam.

no zapodałem Twój kod, jest praktycznie taki sam jak moj ( zapalanie stanem wysokim ) i led pulsuje 0.9Hz (1.1s)
dokładnie, ma być to sygnalizacja optyczna, najprostszy program. nie potrzeba dokładności dużej. Wystarczy na poleceniach "wait"

********************************
Do
Set Led
Waitms 100
Reset Led
Waitms 1000
Loop
*********************************

i nie zapala się na 100ms i 1 sekunda przerwy.
równo na 0.9 Hz pracuje.

pozdr.

Awatar użytkownika
c4v2
Użytkownik
Posty: 426
Rejestracja: 22 lis 2005, 15:14
Lokalizacja: z przed monitora

Post autor: c4v2 » 22 cze 2011, 14:08

Zakładając czas włączenia LED na 100ms i wyłączenia na 1000ms to oczywiście 1Hz się nie uzyska.
Okres dla 1Hz powinien wynosić 1000ms. Aby uzyskać taki okres należy zmodyfikować czas "wygaszenia" LED na 900ms przy czasie zaświecenia równym 100ms.

fluke2010
-
Posty: 31
Rejestracja: 16 maja 2010, 18:11
Lokalizacja: lubuskie

Post autor: fluke2010 » 22 cze 2011, 14:19

Tak, ja to rozumiem to co napisałeś teraz.
Nawet jak tak go zmodyfikuje to na wyjściu otrzymuje przebieg o wypełnieniu 50 %.
1 sekunda stan H 1 sekunda stan L.
Mi chodzi o to aby uzyskać krótkie błyski powtarzające się co około 1 sekundę ( nie musi być to dokładnie )
Błysk ma trwać około 100ms .
Czyli przebieg by wyszedł na wyjściu około 10 % sygnału PWM przy częstotliwości 1Hz.
Krótkie na 100ms "szpilki" co około 1 sekundę.

Awatar użytkownika
c4v2
Użytkownik
Posty: 426
Rejestracja: 22 lis 2005, 15:14
Lokalizacja: z przed monitora

Post autor: c4v2 » 22 cze 2011, 14:32

Zamiast

Kod: Zaznacz cały

Led Alias Pind.2 
nie powinno być

Kod: Zaznacz cały

 Led Alias Portd.2 
?

fluke2010
-
Posty: 31
Rejestracja: 16 maja 2010, 18:11
Lokalizacja: lubuskie

Post autor: fluke2010 » 22 cze 2011, 16:18

Tak, teraz jest ok.
tu był błąd.

Czyli jako wyjście z procka to piszemy np PORTB.1
A jak wejście to PINB.1

dzięki pozdrawiam

Spanner
Użytkownik
Posty: 364
Rejestracja: 18 lip 2010, 18:29
Lokalizacja: Bielsko biała

Post autor: Spanner » 06 wrz 2011, 7:51

Kod: Zaznacz cały

regfile = "ATtiny2313.DAT"
$crystal = 4000000

Config Portd = Output
Config Portd = &B1111111
Config Portb = Output
Config Portb = &B00000000



Led Alias Pind.2

Do
Set Led
Waitms 100
Reset Led
Wait 1

Loop
End 
Zauważ że dwa razy skonfigurowałeś porty powinieneś zamiast

Kod: Zaznacz cały

Config Portd = Output
Config Portd = &B1111111
Config Portb = Output
Config Portb = &B00000000
Napisać

Kod: Zaznacz cały

Config Portd = Output
Portb = &B1111111
Config Portb = Output
Portb = &B00000000

Kod: Zaznacz cały

Czyli jako wyjście z procka to piszemy np PORTB.1
A jak wejście to PINB.1 
Dokładnie, gdy odczytujemy stan końcówki piszemy PIN, natomiast gdy chcemy poda na końcówkę na przykład stan wysoki lub niski to piszemy PORT

ODPOWIEDZ