logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak przeliczać przepełnienie Timer1 16bit w ATmega32 z preskalerem 256?

212men 07 Cze 2004 10:41 14988 54
Najlepsze odpowiedzi LABEL_AI_GENERATED

Jak obliczyć przepełnienie 16-bitowego Timer1 w ATmega32 przy preskalerze 256 i zegarze 16 MHz?

Przepełnienie Timer1 16-bitowego następuje po 2^16 zliczeniach, czyli po osiągnięciu 0xFFFF; przy 16 MHz i preskalerze 256 jeden takt timera trwa 16 µs, więc do overflowu dochodzi po 65536 taktach, czyli po około 1,05 s [#679612] Jeśli chcesz odmierzać dokładnie 1 sekundę, nie używaj wartości 62500 jako „overflowu”, tylko licz faktyczne przepełnienia albo odpowiednio preloaduj TCNT1. Przy okazji: w ATmega32 przerwanie INT0 da się konfigurować w MCUCR bitami ISC00 i ISC01, więc nie musi być wyzwalane tylko stanem niskim [#684990]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA
  • #1 679530
    212men
    Poziom 11  
    Posty: 15
    To mój pierwszy post na tym forum.. :)
    Zrobiłem zegar DCF na dyplomówkę ATmega32 + 16MHz + 2*16 + U4221B (DCF) + RS232 + RC5 all SMD. W
    szystko jest na jednej płytce i chodzi oki,odbiornik działa oki nie widzę zakłuceń (mam diodę z ID tego sygnału) teraz to programuję w Bascomie i tak...
    Nie chodzi mi samo dekodowanie DCF:
    - wykorzystuję przerwanie Int0 do detekcji Bitu Synchro nie wiem czy dobrze działa Timer1 zliczający czas trwania impulsu DCF Synchro
    - wzorowałem sie na Pecelu ale tam jest 8535 i Int0 da sie definiowac w ATmega to tylko Low Level
    Jak przeliczać przepełnienie Timeru1 16bit preskaler mam 256 i 16MHz?
    Z góry dzięki za wszelką pomoc!!!
    PS.Mogę podesłać mój programik
  • REKLAMA
  • #2 679559
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Czegoś tu nie rozumiem, wszystko chodzi OK a ty drugi raz piszesz ten program w Bascomie ? Po jakie licho!
  • #3 679566
    212men
    Poziom 11  
    Posty: 15
    Może zle sie wyrazilem wszystko działa oki tj.zegar RTC RS232 RC5 i sam odbiornik DCFa nie działa i nie umiem sobie poradzić z tymi przerwaniami i Timerem żeby zdekodować ten sygnał!
    Może Ktoś chce się pobawić samym programikiem?
  • REKLAMA
  • #4 679592
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Ja mam takie opracowanie ale na '51 Szkoda bo Bascomem nie programuję. Timer napewno działa dobrze tylko zależy jak go ustawisz. Ja to robiłem trochę inaczej. Przerwanie sygnału DCF-a dawało informację do programu głównego o odmierzenie czasu zwłoki i czasu tim-out. Czas zwłoki sprawdzał wartość odebranego bitu no a tim-out oczekiwał na "dziurę transmisyjną" czyli 59 impuls określający konieć transmisji DCF-u. Muszę dodać że dla zwiększenia odporności na zakłucenia oprucz sprawdzania bitów kontrolnych zastosowałem jeszcze własną kontrolę dwóch kolejnych odczytów, które muszą różnić się o jeden, wtedy odczytany czas jest poprawny.

    Proszę poprawić pisownię.
    Robak
  • REKLAMA
  • #5 679607
    212men
    Poziom 11  
    Posty: 15
    O tez ciekawie!!!
    Ja mam tylko koncepcje co do wykrycia Synchro:
    ATmega po zmianie z 1 na 0 wywoływane jast Int0 wtedy uruchamia się Timer1 i liczy impulsy do pojawienia 1 na tym porcie i zatrzymuje Timer1 sprawdzam czy licznik 62500 przeszedl ponad dwa razy jak tak to nie bylo zmiany z 1 na 0 w 59 sekundzie wtedy powinienem zliczac od nowa Timerem1 bity 0,1,2...
    ale licznik nie generuje mi przerwania????pewnie cos zle go ustawiam?
    może za mało impulsów???
  • #6 679612
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Co to jest za liczba 62500, do czego ci one jest potrzebna ? Przepełnienie to 2^16 czyli 0xFFFF
  • #7 680042
    yego666
    Poziom 33  
    Posty: 2175
    Pomógł: 239
    Ocena: 564
    Dioda kontrolna na wyjsciu odbiornika DCF jest fajna, ale nie zobaczysz nia faktycznych czasow i odchylek sygnalu. By sie przekonac czy to dziala czy nie zacznij od testowania samego odbiornika za pomoca n.p. czestosciomierza, lub taniej, napisz jakis drobny sofcik na procka by Ci wyswietlal czasy trwania impulsow. Jak to Ci przejdzie OK, wtedy powalcz z timerem i innymi zagadnieniami stricte procesorowymi. Z mojego doswiadczenia wynika, ze odbiornik DCF zbiera silne zaklocenia EM od sasiadujacej elektroniki i daje paskudne przebiegi. Zwykle pomaga silna filtracja zasilania, ekranowanie i obnizenie wszelkich czestotliwosci ( n.p. przemiatanie wyswietlaczy , RS232, etc.. ) generowaanych przez procesor.
    Moj zegar przemiata panel Nixie z czestoscia ok 300Hz, a i tak musze odbiornik DCF oddalac o ponad 20 cm by dzialal niezawodnie. Odchylki sygnalu DCF z odbiornika moga siegac nawet kilku ms od idealu. Zaloz pewna tolerancje na czasy trwania poszczegolnych poziomow - n.p. 30% :) .
  • #8 681091
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Z tolerancją dla DCF-a nie ma problemu. Sygnał ten w założeniu ma dużą toleracnę sygnału. Ja przykładowo TimeOut mam ustawiony na 1,5sek a czas sygnału sprawdzającego na 150ms. Ja odbiornik DCF-a mam na dosyć długim kabelku, nie robiłem go tylko w oryginalnym rozwiązaniu, co pozwala na oddalenie odbiornika od wszystkich potencjalnych źródel zakłuceń. Niekiedy przed burzą to widać jak jedo diodka szaleje.
  • #9 684108
    212men
    Poziom 11  
    Posty: 15
    Ja wszystko mam obok siebie na plytce wymiarów 14x7cm Ale gorzej że mam ATmega32 a tam Int0 jest generowany przy niskim stanie i nie jest to konfigurowane i mam ciagle przerwania!!! Pomóżcie jeśli możecie!
    Bawiłem się samymi przerwaniami tzn.jak Int0 to Lcd dawal napis Przerwanie ale prawie non stop są przerwania!! Niewiem coś żle robie pewnie? Jak takie przerwania uchwycić??
  • #10 684663
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Prawdopodobnie masz przerwanie ustawione na poziom a nie na zbocze dlatego generują Ci się ciągle przerwania.
  • #11 684925
    212men
    Poziom 11  
    Posty: 15
    No dokładnie tak jest Master ale co ja mam zrobić ja mam ATmega32 a w nim Int0 nie jest konfigurowalne!! Int0 jest generowane niskim stanem!!
  • #12 684948
    212men
    Poziom 11  
    Posty: 15
    Da się jakos maskować przerwania Int0,1 w tych kontrolerach???
  • #13 684990
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Nie masz racji !!! W rejestrze MCUCR za rodzaj wyzwalania przerwania INT0 są bity ISC00 i ISC01, mozna spoko ustawić obydwa przerwania w dowolny sposób w procku ATmega32. Zerknij do manuala na stronę 65
  • #14 689456
    212men
    Poziom 11  
    Posty: 15
    To mnie uratowałeś!!!
    Czyli Zmianą zbocza też może wywoływać przerwania?
    A już o nic nie będę pytał możesz rzucic krótki progs na włączenie tych bitów tak aby ATmega32 obsługiwał właśnie takie przerwanie???
    Z góry dzięki za całą pomoc!
  • #15 1322313
    Bogumił Kazimierski
    Poziom 12  
    Posty: 20
    Pomógł: 1
    Witam!
    Chciałbym zbudować taki zegar, ale nie mam pojęcia jak się zabrać za oprogramowanie w Bascomie.
    Z tego, co wyczytałem jest Pan bliski zakończenia tego tematu i w związku z tym mam prośbę o pomoc w formie jakiś przykładów.
    Pozdrawiam
    Bogumił Kazimierski
  • #16 4825128
    Aimeiz
    Poziom 16  
    Posty: 290
    Pomógł: 2
    Ocena: 20
    Program zegara z synchronizacją z DCF z Bascomie jest trywialny, ponieważ Bascom posiada komendy do obsługi DCF.
    Zrobiłem na procku atmega8 z kwarcem 8 MHz.
    Wyświetlanie na dwulinijkowym LCD:
    Godzina: hh:mm:ss
    Data: dd/mm/52

    
    'Zegar DCF77
    $regfile = "m8def.dat"
    $crystal = 8000000
    'Sygnał z odbiornika DCF podłączony do Portb.2
    Config Dcf77 = Pinb.2 , Debug = 1 , Inverted = 0 , Check = 0 , Update = 0 , Updatetime = 0 , Switchpower = 0 , Secondticks = 50 , Timer1sec = 1 , Powerlevel = 1 , Timer = 1 , Gosub = Sectic
    'Można użyć zwiększonego poziomu sprawdzania poprawności sygnału,
    'ale wtedy zegarek będzie synchronizowany nie częściej niż co 2 minuty,
    'Config Dcf77 = Pinb.2 , Debug = 1 , Inverted = 0 , Check = 2 , Update = 0 , Updatetime = 0 , Switchpower = 0 , Secondticks = 50 , Timer1sec = 1 , Powerlevel = 1 , Timer = 1 , Gosub = Sectic
    
    'Wyświetlacz LCD 16*2. Sygnały jak poniżej.
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
    Config Lcd = 16 * 2
    Cursor Off
    Enable Interrupts
    Config Date = Dmy , Separator = /
    Do
    Wait 5
    Loop
    
    'Co sekundę aktualizuje wyświetlacz
    Sectic:
       Cls
       Upperline
       Lcd Time$
       Lowerline
       Lcd Date$
    Return
    
    End
    


    Podejrzewam że bez zmian innych niż definicja procesora, będzie działał na atmega 32.

    Pozdrawiam.

    Marcin.
  • #17 4827714
    Bogumił Kazimierski
    Poziom 12  
    Posty: 20
    Pomógł: 1
    Dziękuję za przykład.
    Do tej pory bawiłem się trochę Bascomem 8051 i nie wiedziałem, że Bascom AVR i Atmega mają takie przydatne funkcje i procedury do ich obsługi. Zdecydowanie zaczynam zabawę z AVR-ami.
    Pozdrawiam
    Bogumił Kazimierski. :D
  • #18 4828310
    gregoorr
    Poziom 18  
    Posty: 232
    Pomógł: 19
    Ocena: 34
    Pisałem już o tym w innym poście, z archiwum EP można pobrać program do zegara z DCF, jest to program źródłowy w Bascomie wart przejrzenia. Co do instrukcji Config DCF77 to wywala mi same błędy. Potrzebna jest jakaś konkretna wersja Bascoma?
  • REKLAMA
  • #19 4829159
    Aimeiz
    Poziom 16  
    Posty: 290
    Pomógł: 2
    Ocena: 20
    Zamieszczony wcześniej kod jest sprawdzony - działa na atmega8
    Również po pomyfikacjach portów działa na attiny2313 i zajmuje 65% flash, wiec jest jeszcze miejsce na jakieś "wodotryski".

    Używam Bascom demo w wersji chyba najnowszej:
    1.11.8.7 build 001
    MS windows XP SP-2

    Program pod attiny2313 na płytce uruchomieniowej ZL11AVR (Płytka ZL2AVR pod megę ma wszystko łączone kabelkami i porty mogą być praktycznie dowolne. ZL11AVR ma wszystko juz połączone "na sztywno" i trzeba się trzymać adresacji).

    
    '************************
    'Zegar DCF77
    'by AIMEIZ aimeiz@o2.pl
    '************************
    $regfile = "2313def.dat"
    $crystal = 8000000
    'Sygnał z odbiornika DCF podłączony do Portb.2
    Config Dcf77 = Pind.2 , Debug = 1 , Inverted = 0 , Check = 0 , Update = 0 , Updatetime = 0 , Switchpower = 0 , Secondticks = 50 , Timer1sec = 1 , Powerlevel = 1 , Timer = 1 , Gosub = Sectic
    'Można użyć zwiększonego poziomu sprawdzania poprawności sygnału,
    'ale wtedy zegarek będzie synchronizowany nie częściej niż co 2 minuty,
    'Config Dcf77 = Pinb.2 , Debug = 1 , Inverted = 0 , Check = 2 , Update = 0 , Updatetime = 0 , Switchpower = 0 , Secondticks = 50 , Timer1sec = 1 , Powerlevel = 1 , Timer = 1 , Gosub = Sectic
    
    'Wyświetlacz LCD 16*2. Sygnały jak poniżej.
    Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
    Config Lcd = 16 * 2
    Cursor Off
    Enable Interrupts
    Config Date = Dmy , Separator = /
    Do
    Wait 5
    Loop
    
    'Co sekundę aktualizuje wyświetlacz
    Sectic:
       Cls
       Upperline
       Lcd Time$ ; "    ";
       If Pind.2 = 0 Then Lcd "Rcvr" Else Lcd "    "
       Lowerline
       Lcd Date$
    Return
    
    End
    
    


    Obecnie czekam na kit odbiornika DCF, ale przeniosłem na attiny 13 opublikowany gdzieś w sieci symulator DCF i na nim próbuję programy.
    Symulator nadaje cały czas tę samą godzinę i datę, dlatego w wersji testowej, wykorzystuję tylko podstawowe sprawdzanie poprawności sygnały - suma kontrolna.
    Dla rzeczywistego zegara można włączyć tryb porównywania dwóch kolejnych transmisji, który uznaje prawidłowo odebrany sygnał wtedy, gdy dwie kolejne transmisje różnią się tylko jedną minutą (zakomentowana linijka w programie).
    Ponieważ w Bascomie praktycznie całość to kod assemblerowy, chyba nie warto się męczyć z pisaniem tego "na piechotę".

    Symulator zrobiłem na płytce ZL4AVR - taka pod attiny 13, 25, 45, 85 lub attiny 26.
    Poniżej kod do niego.
    Nie jest to mój kod, napisany był na 89c2051.
    Zrobiłem porting i dodałem na jednej z nóżek sygnał modulujący DCF.
    Oryginalny kod dostępny na stronie wymienionej w programie.
    Bardzo przydatne narzędzie do uruchamiania dekoderów DCF.

    
    'kombo@klub.chip.pl      >>>>>>>>>>>>>www.klub.chip.pl/kombo<<<<<<<<<<<<<<<<<
    'Porting on attiny13 by AIMEIZ  aimeiz@o2.pl
    'Impulsy dcf są wyprowadzane na port Portb.3 w formacie TTL
    'Na portb.0 jest generator modulacyjny - 1 khz
    'Na portb.1 modulacja dcf
    'Ustawiona data i czas 14:54 23 grudnia piątek 2052 roku
    $regfile = "attiny13.dat"
    $crystal = 9600000                                          '9.6Mhz
    $hwstack = 8
    $swstack = 8
    $framesize = 8
    Config Clockdiv = 1
    Const Podzielnik = 72
    Dim Flag As Bit , Licznik As Byte , Dane As Byte , Bity As Byte , Dzielnik As Byte
    Dcf_pin Alias Portb.3
    Generator Alias Portb.0
    Modulacja Alias Portb.1
    Config Timer0 = Timer , Prescale = 64
    'Config Timer0 = Timer , Gate = Internal , Mode = 1
    Config Portb = Output
    Portb = 0
    On Ovf0 Timer_0_int
    Enable Timer0
    Enable Interrupts
    'Start Timer0
    
    Do
    Reset Dcf_pin                                               'pętla generująca przerwę w nadawaniu sygnalu 1000 ms
    For Licznik = 1 To 100
    
    Waitms 10
    Bitwait Flag , Set
    Reset Flag
    Next
    
    For Bity = 0 To 58                                          'pętla pobierająca dane z tabeli
    Dane = Lookup(bity , Table)
    If Dane = 1 Then Gosub Jedynka
    If Dane = 0 Then Gosub Zero
    Next
    Loop
    
    Jedynka:                                                    'pdprogram generujący "jedynkę"
    For Licznik = 1 To 100
    
    Waitms 10
    If Licznik > 0 And Licznik < 21 Then
    Set Dcf_pin
    Else
    Reset Dcf_pin
    End If
    Bitwait Flag , Set
    Reset Flag
    Next
    Return
    
    Zero:                                                       'podprogram generujący "zero"
    For Licznik = 1 To 100
    Waitms 10
    If Licznik > 0 And Licznik < 11 Then
    Set Dcf_pin
    Else
    Reset Dcf_pin
    End If
    Bitwait Flag , Set
    Reset Flag
    Next
    Return
    
    Timer_0_int:
    'waitus 1
    Load Timer0 , Podzielnik
    Set Flag
    Toggle Generator
    If Dcf_pin = 1 Then Modulacja = Generator Else Reset Modulacja
    Return
    
               'Ustawiona data i czas 14:54 23 grudnia piątek 2052 roku
    Table:
    Data &B0                                                    '1
    Data &B0                                                    '2
    Data &B0                                                    '3
    Data &B0                                                    '4
    Data &B0                                                    '5
    Data &B0                                                    '6
    Data &B0                                                    '7
    Data &B0                                                    '8
    Data &B0                                                    '9
    Data &B0                                                    '10
    Data &B0                                                    '11
    Data &B0                                                    '12
    Data &B0                                                    '13
    Data &B0                                                    '14
    Data &B0                                                    '15
    Data &B0                                                    '16   Typ anteny
    Data &B0                                                    '17   Zapowiedź zmiany czasu
    Data &B1                                                    '18   LSB Czas letni/zimowy
    Data &B0                                                    '19   MSB Czas letni/zimowy
    Data &B0                                                    '20   Korekta czasu
    Data &B1                                                    '21   Początek informacji
    
    Data &B0                                                    '22   LSB Jednostki minut
    Data &B0                                                    '23       Jednostki minut
    Data &B1                                                    '24       Jednostki minut
    Data &B0                                                    '25   MSB Jednostki minut
    Data &B1                                                    '26   LSB Dziesiątki minut
    Data &B0                                                    '27       Dziesiątki minut
    Data &B1                                                    '28   MSB Dziesiątki minut
    Data &B1                                                    '29   Bit parzystości minut
    
    Data &B0                                                    '30   LSB Jednostki godzin
    Data &B0                                                    '31       Jednostki godzin
    Data &B1                                                    '32       Jednostki godzin
    Data &B0                                                    '33   MSB Jednostki godzin
    Data &B1                                                    '34   LSB Dziesiątki godzin
    Data &B0                                                    '35   MSB Dziesiątki godzin
    Data &B0                                                    '36   Bit parzystości godzin
    
    Data &B1                                                    '37   LSB Jednostki dnia miesiąca
    Data &B1                                                    '38       Jednostki dnia miesiąca
    Data &B0                                                    '39       Jednostki dnia miesiąca
    Data &B0                                                    '40   MSB Jednostki dnia miesiąca
    Data &B0                                                    '41   LSB Dziesiątki dnia miesiąca
    Data &B1                                                    '42   MSB Dziesiątki dnia miesiąca
    Data &B1                                                    '43   LSB Dnia tygodnia
    Data &B0                                                    '44       Dnia tygodnia
    Data &B1                                                    '45   MSB Dnia tygodnia
    Data &B0                                                    '46   LSB Jednostki miesiąca
    Data &B1                                                    '47       Jednostki miesiąca
    Data &B0                                                    '48       Jednostki miesiąca
    Data &B0                                                    '49   MSB Jednostki miesiąca
    Data &B1                                                    '50   Dziesiątki miesiąca
    Data &B0                                                    '51   LSB Jednostki roku
    Data &B1                                                    '52       Jednostki roku
    Data &B0                                                    '53       Jednostki roku
    Data &B0                                                    '54   MSB Jednostki roku
    Data &B1                                                    '55   LSB Dziesiątki roku
    Data &B0                                                    '56       Dziesiątki roku
    Data &B1                                                    '57       Dziesiątki roku
    Data &B0                                                    '58   MSB Dziesiątki roku
    Data &B0                                                    '59   Bit parzystości bitów 37-58
    
    'Wyliczenie bitu parzystości polega na: obliczeniu ilości jedynek w danych
    'jeśli jest parzysta to bit parzystości jest zerem , jeśli nie jedynką
    
  • #20 4829374
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    W kwestii formalnej do kolegów, którzy tego nie wiedzą: zakłóceń piszemy przez o z kreską, podobnie jak oprócz (http://so.pwn.pl/lista.php?co=zak%B3%F3cenia). Czy programy pisane przez Was w BASCOMie są tak samo wiarygodne jak teksty pisane otwartym kodem ;) :?:

    Niedługo przyjdzie do mnie programista i powie, że program mu nie wyszedł, bo jest dyslektykiem (oczywiście z zaświadczeniem od lekarza ;) ).
  • #21 4829433
    gregoorr
    Poziom 18  
    Posty: 232
    Pomógł: 19
    Ocena: 34
    gregoorr napisał:
    Pisałem już o tym w innym poście, z archiwum EP można pobrać program do zegara z DCF, jest to program źródłowy w Bascomie wart przejrzenia. Co do instrukcji Config DCF77 to wywala mi same błędy. Potrzebna jest jakaś konkretna wersja Bascoma?


    Program pracuje poprawnie po zainstalowaniu wesji 1.11.8.7 (można ściągnąć demo). Na 1.11.8.1 nie chciał się skompilować.
  • #22 4830083
    Aimeiz
    Poziom 16  
    Posty: 290
    Pomógł: 2
    Ocena: 20
    marek_Łódź napisał:
    W kwestii formalnej do kolegów, którzy tego nie wiedzą: zakłóceń piszemy przez o z kreską,

    Obawiam się że ta uwaga jest mocno spóźniona.
    Ostatni błąd ortograficzny w tym wątku został popełniony blisko cztery lata temu - Pewnie od tego czasu już maturka została zdana :)

    gregoorr napisał:
    ........
    Program pracuje poprawnie po zainstalowaniu wesji 1.11.8.7 (można ściągnąć demo). Na 1.11.8.1 nie chciał się skompilować.

    Tak - Bascom ma różne ciekawe gotowe funkcje, które oszczędzają sporo czasu i pracy programiście. Nie wszystko jednak prawidłowo działa, w dodatku poprawność zależy od procesora na który się pisze, również od wersji kompilatora. Dlatego, aby z publikowania na forum był prawdziwy pożytek, kod należy uruchomić i sprawdzić.
    Może faktycznie przy publikowaniu kodów źródłowych warto od razu podawać wersję kompilatora z którego pochodził działający kod wynikowy.
  • #23 4830334
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Aimeiz napisał:
    marek_Łódź napisał:
    W kwestii formalnej do kolegów, którzy tego nie wiedzą: zakłóceń piszemy przez o z kreską,

    Obawiam się że ta uwaga jest mocno spóźniona.
    Ostatni błąd ortograficzny w tym wątku został popełniony blisko cztery lata temu - Pewnie od tego czasu już maturka została zdana :)

    ........Na naukę nigdy nie jest za późno, a z pewnością i wśród nowych adeptów elektroniki jest wielu takich, dla których pisownia takiego czy innego słowa stanowi niespodziankę.
  • #24 4831659
    Aimeiz
    Poziom 16  
    Posty: 290
    Pomógł: 2
    Ocena: 20
    [quote="gregoorr"]
    gregoorr napisał:
    Pisałem już o tym w innym poście, z archiwum EP można pobrać program do zegara z DCF............

    Masz ponad setkę postów i ciężko znaleźć kod o którym wspominasz.
    Chętnie bym zerknął. Możesz "wkleić" link?
  • #26 4847438
    thorin00
    Poziom 14  
    Posty: 163
    Pomógł: 2
    witam
    mam pytanko gdzie kupic u4221 i rezonator 77,5khz. w czestochowie w zadnym sklepie elktronicznym tego nie maja, w tme tez szukalem, w avt widzialem w wersji smd
  • #27 4848833
    Aimeiz
    Poziom 16  
    Posty: 290
    Pomógł: 2
    Ocena: 20
    thorin00 napisał:
    witam
    mam pytanko gdzie kupic u4221 i rezonator 77,5khz. w czestochowie w zadnym sklepie elktronicznym tego nie maja, w tme tez szukalem, w avt widzialem w wersji smd

    Można kupić w www.cyfronika.pl , ale w podobnej cenie jest cały kit odbiornika dcf zestaw KZ300 na tym samym układzie, i jeszcze z obudową i antena ferrytową.
    Nie wiem jeszcze czy zmontowany, czy trzeba polutować, bo czekam na przesyłkę.
  • #28 4860611
    Aimeiz
    Poziom 16  
    Posty: 290
    Pomógł: 2
    Ocena: 20
    Dziś przyszedł kit.
    Zawiera wszystkie niezbędne elementy, tylko układ u4221b jest smd i trzeba się pobawić z jego wlutowaniem.
    Jest to jedyny element umieszczony od strony druku.
    Zestaw zawiera kwarc 77.5 KHz, wstępnie zestrojony obwód wejściowy z anteną ferrytową.
    Tranzystory na schemacie są BC308 i BC 238 a w zestawie były BC547B NPN i BC557B PNP. Trzeba było sprawdzić który gdzie wlutować.
    Zmontowałem - zająło z godzinkę i działa.
    Niestety poziom zakłóceń od komputera, drukarki i Bóg wie czego jeszcze, w mojej pracowni uniemożliwia odbiór.
    Musiałem zasilić odbiornik z baterii i wyjść do innego pokoju żeby odbierał.
    Jak powyłączałem sprzęt komputerowy, wtedy zaczął ładnie odbierać i dobrze współdziałał z zegarem na tiny 2313.
    Widać ze zegar można na tym zrobić.
    W sklepie internetowym AVT można kupić scalak u4221b - 22 zł i kwarc 77.5 kHz za 4 zł, ale jeszcze trzeba ten ferryt i cewkę i płytkę, to chyba lepiej kupić zestaw.
  • #29 4860902
    Aimeiz
    Poziom 16  
    Posty: 290
    Pomógł: 2
    Ocena: 20
    Jednej rzeczy natomiast nie rozumiem.
    Mam zegarek DCF produkcji Chińskiej, który dostałem w prezencie kilkanaście lat temu.
    Jego zdolność do odbierania DCF wydaje się być znacznie lepsza. Ma antenkę ferrytową podobnych rozmiarów jak ta w zestawie a działa dużo lepiej. Kiedyś kupiłem odbiornik DCF do ustawiania czasu w komputerze i też odbierał dużo gorzej niż ten w zegarku.
    Zegarek ma na płytce dwa scalaki zintegrowane z płytka i tylko jeden kwarc. Na kondensatorze anteny ferrytowej jest napisane 100ppn. Może zwojów jest więcej, większy stosunek L / C więc większa dobroć obwodu wejściowego i dzięki temu lepsze czułość i odporność na zakłócenia??
    Tutaj znalazłem opis fabryczny U4221b.
    http://www.ortodoxism.ro/datasheets/Temic/mXyzuryz.pdf.
    Szkoda że scalaczek niema na którejś z nóżek wyjścia zdemodulowanego sygnału. Można by się podpiąć z oscyloskopem i zobaczyć jak wygląda sygnał po detektorze i precyzyjnie zestroić obwód.
  • #30 4960250
    spektra
    Poziom 18  
    Posty: 332
    Pomógł: 10
    Ocena: 60
    Witam.
    Panowie. Widzę że macie dużą wiedzę na temat DCF. Przybliżycie mi jedną kwestię. Odczyt z DCF-a rozpoczynam równo o 12:00, dekoduje wszystkie bity. OK to rozumiem. w 22 sekundzie odczytuję jednostki minut. Mniemam, że odczytana zostanie wartośc to :01 , aby po zakończeniu dekodowania sygnału z DFC i zapisy czasu do PCF-a czas nie różnił się od wzorca DCF?
    Pozdrawiam: SPEKTRA

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy problemów z przeliczaniem i obsługą przepełnienia 16-bitowego Timer1 w mikrokontrolerze ATmega32 z zegarem 16 MHz i preskalerem 256 podczas dekodowania sygnału DCF77. Użytkownicy omawiają konfigurację przerwań zewnętrznych INT0, które w ATmega32 mogą być wyzwalane na poziomie niskim lub zboczu, z możliwością ustawienia w rejestrze MCUCR (bity ISC00 i ISC01). Poruszono kwestie prawidłowego ustawienia timera, przeliczenia wartości przepełnienia (maksymalna wartość 65535), oraz problemów z ciągłymi przerwaniami wynikającymi z trybu wyzwalania INT0. Wskazano, że Timer1 liczy impulsy od momentu wykrycia zbocza sygnału DCF, a jego przerwania można wykorzystać do pomiaru czasu trwania impulsów sygnału DCF77. Dyskutowano także o zakłóceniach elektromagnetycznych wpływających na odbiór sygnału DCF, konieczności stosowania filtracji, ekranowania i odpowiedniego rozmieszczenia elementów na płytce. Wątek obejmuje również przykłady programów w Bascom AVR do obsługi DCF77, w tym konfiguracje i funkcje wbudowane w Bascom do dekodowania sygnału, a także symulatory sygnału DCF77 do testów. Poruszono kwestie synchronizacji zegara z sygnałem DCF, weryfikacji poprawności ramki (bity parzystości, zmienna dcf_status), oraz problemy z zakłóceniami i stabilnością działania zegara. Wskazano na dostępność układu U4221B i zestawu KZ300 do odbioru DCF77, a także na różnice w jakości odbioru sygnału w zależności od konstrukcji anteny ferrytowej i warunków zakłóceń. Podsumowując, kluczowe jest prawidłowe ustawienie przerwań INT0, konfiguracja Timer1 z preskalerem 256 przy 16 MHz, uwzględnienie tolerancji sygnału DCF, oraz stosowanie odpowiednich środków eliminacji zakłóceń w sprzęcie i oprogramowaniu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA