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!
-
Destroyer
- -
- Posty: 37
- Rejestracja: 01 sie 2005, 17:12
- Lokalizacja: Lublin
-
Kontakt:
Post
autor: Destroyer » 27 sty 2014, 10:03
Witam,
buduję zegar synchronizowany sygnałem radiowym DCF 77. Mam problem z uzyskaniem synchronizacji mimo prawidłowo działającego odbiornika DCF. Wszystko testuję na standardowej procedurze BASCOMa dotyczącej dekodowania sygnału DCF. Kolejnym problemem jest powolne działanie zmiennej TIME$. Jej wartości zmieniają się co 5-6 s. W czym może tkwić problem?
Kod: Zaznacz cały
$regfile = "m8adef.dat"
$crystal = 6000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.1 , Db6 = Portc.0 , Db7 = Portc.4 , E = Portc.3 , Rs = Portc.5
Config Dcf77 = Pind.0 , Debug = 1 , Inverted = 0 , Check = 0 , Update = 0 , Updatetime = 0 , Switchpower = 0 , Secondticks = 50 , Timer1sec = 1 , Powerlevel = 1 , Timer = 1 , Gosub = Sectic
Cursor Off
Enable Interrupts
Do
Wait 5
Loop
'Co sekundę aktualizuje wyświetlacz
Sectic:
Cls
Lcd Time$
Return
End
-
paciek74
- -
- Posty: 13
- Rejestracja: 07 gru 2008, 13:11
- Lokalizacja: Piotrków Tryb
Post
autor: paciek74 » 27 sty 2014, 19:35
Przecież komendą Wait 5 praktycznie zatrzymujesz działanie procesora na około 5 sekund . Jak chcesz ją tak bardzo używać to daj Waitms 500 i zobacz co się stanie.
-
matrix
- Użytkownik
- Posty: 1796
- Rejestracja: 15 mar 2006, 5:21
- Lokalizacja: Sochaczew
-
Kontakt:
Post
autor: matrix » 28 sty 2014, 16:34
A jaki procesor kolega programował ? Nowy czy już programowany? Jak nowy to proponuję zacząć od zmiany fusów bo tu na pewno będzie podział przez 8 ustawiony na ENABLE.
-
paciek74
- -
- Posty: 13
- Rejestracja: 07 gru 2008, 13:11
- Lokalizacja: Piotrków Tryb
Post
autor: paciek74 » 28 sty 2014, 17:06
Atmega8 to nie Attiny2313 i nie ma wewnętrznego dzielnika przez 8. Jeżeli jest to nowy chip to taktowanie jest 1MHz na wewnętrznym oscylatorze RC. Zmień sobie $crystal=1000000 i zobacz.
-
Destroyer
- -
- Posty: 37
- Rejestracja: 01 sie 2005, 17:12
- Lokalizacja: Lublin
-
Kontakt:
Post
autor: Destroyer » 30 sty 2014, 9:23
Ok, program działa płynnie. Wywaliłem rezonator kwarcowy 6MHz i zmieniłem $crystal = 6000000 na $crystal = 1000000. Zmienna Time$ zmienia wartości dokładnie co sekundę.
Pozostaje tylko problem dekodowania sygnału DCF. Dioda w odbiorniku miga z częstotliwością 1Hz także sygnał jest odbierany. Zostawiłem zegar na całą noc i nic się nie zmieniło, czas zliczał się od momentu włączenia, a godzina się nie ustawiła. Próbowałem też deklarować PortD.0 = Input, ale to też za bardzo nic nie dało. Teraz ta kwestia dekodowania pozostaje dla mnie zagadkowa.

-
matrix
- Użytkownik
- Posty: 1796
- Rejestracja: 15 mar 2006, 5:21
- Lokalizacja: Sochaczew
-
Kontakt:
Post
autor: matrix » 30 sty 2014, 11:35
W bascomie zawsze jako wejście deklarowałem PIN a nie port. Jak zadeklarowałem PORT = input to nie chciało działać.
-
paciek74
- -
- Posty: 13
- Rejestracja: 07 gru 2008, 13:11
- Lokalizacja: Piotrków Tryb
Post
autor: paciek74 » 30 sty 2014, 17:41
Zobacz jaki sygnał jest z wyjścia odbiornika DCF, być może trzeba zmienić Inverted = 0 na Inverted = 1, w konfiguracji dcf.
Przed chwilą sprawdziłem twój kod i uruchomiłem na swojej płytce - efekt działa, po około 2 min ustawia się godzina (mam dcf na układzie u4221b). Sprawdź swoje połączenia, a najważniejsze to co napisałem wcześniej.
Ostatnio zmieniony 30 sty 2014, 20:35 przez
paciek74, łącznie zmieniany 1 raz.
-
Destroyer
- -
- Posty: 37
- Rejestracja: 01 sie 2005, 17:12
- Lokalizacja: Lublin
-
Kontakt:
Post
autor: Destroyer » 30 sty 2014, 20:07
Właśnie zmieniłem deklarację z Config PortD.0 = Input na PIND.0 = Input. Program zachowuje się nadal tak samo. Z odbiornika wychodzą mi dodatnie impulsy. Także parametr Inverted = 0 moim zdaniem jest OK. Dioda miga, a zegar się w ogóle nie chce synchronizować.
-
paciek74
- -
- Posty: 13
- Rejestracja: 07 gru 2008, 13:11
- Lokalizacja: Piotrków Tryb
Post
autor: paciek74 » 30 sty 2014, 20:41
Przepisz sobie tą część programu po "config=lcdpin"
Kod: Zaznacz cały
Config Dcf77 = Pind.0 , Debug = 1 , Inverted = 0 , Check = 0 , Update = 0 , Updatetime = 0 , Switchpower = 0 , Secondticks = 50 , Timer1sec = 1 , Powerlevel = 1 , Timer = 1 , Gosub = Sectic
Config Lcd = 16 * 2
Cursor Off
Enable Interrupts
Do
Loop
Sectic:
Cls
Lcd Time$
Return
End
bo sprawdziłem, że działa poprawnie i dekoduje sygnał dcf.
-
Destroyer
- -
- Posty: 37
- Rejestracja: 01 sie 2005, 17:12
- Lokalizacja: Lublin
-
Kontakt:
Post
autor: Destroyer » 31 sty 2014, 8:57
Chciałbym być na Twoim miejscu i podziwiać ten zdekodowany czas

Mi natomiast godzina się nie ustawia. Wygląda to tak jakby procesor nie widział w ogóle tych impulsów pochodzących od odbiornika (odbiornik Conrada). Odbiornik ma dwa wyjścia. Są dostępne impulsy dodatnie jak i ujemne. Sprawdziłem też na impulsach ujemnych zmieniając przy tym parametr Inverted z 0 na 1. Nie mam żadnej synchronizacji. Może z odbiornikiem coś jest nie tak. Połączenia sprawdzałem x razy i wszystko jest OK.
-
paciek74
- -
- Posty: 13
- Rejestracja: 07 gru 2008, 13:11
- Lokalizacja: Piotrków Tryb
Post
autor: paciek74 » 31 sty 2014, 23:40
To dopisz sobie kawałek programu, żeby pokazywał na wyświetlaczu to co dzieje się na pinie D.0 i wtedy zobaczysz czy dochodzi sygnał.
A tak w ogóle to załącz jakiś schemat, zdjęcie układu to może się coś poradzi bo na razie to sobie tylko gdybamy.
-
Destroyer
- -
- Posty: 37
- Rejestracja: 01 sie 2005, 17:12
- Lokalizacja: Lublin
-
Kontakt:
Post
autor: Destroyer » 04 lut 2014, 22:12
Poradziłem sobie z problemem. Zmieniłem wartość Check = 0 na Check = 2. Złapałem godzinę

Zauważyłem, że pomiędzy synchronizacjami, podczas normalnej pracy zegar się opóźnia. Jednym słowem jest niedokładny. Ale jest to temat z którym dam sobie radę. Dziękuje za zajęcie się moim problemem.

-
paciek74
- -
- Posty: 13
- Rejestracja: 07 gru 2008, 13:11
- Lokalizacja: Piotrków Tryb
Post
autor: paciek74 » 06 lut 2014, 9:51
Zegar się opóźnia bo pewnie nie podłączyłeś kwarcu tylko korzystasz z generatora wewnętrznego Atmegi (generator RC - zobacz w nocie katalogowej jak częstotliwość zależy od napięcia i od innych rzeczy). podłącz kwarc 1000000 i będzie o niebo lepiej.