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

[ATmega8][BASCOM] DS1307, 7 diod LED, kod BCD. Na wyjściu ciągle 1.

Logan 09 Mar 2009 18:21 6243 21
REKLAMA
  • #1 6258850
    Logan
    Poziom 30  
    Witam

    Postanowiłem dzisiaj zapoznać się z komunikacją I²C. Na płytce edukacyjnej mam układ DS1307, z którego chciałem odczytać sekundy i wyświetlić na 7 diodach led. W kodzie BCD oczywiście. Niestety na wyjściu ciągle mam 1. Męczę datasheeta oraz google, ale nadal nie wiem co robię źle.

    
    $regfile "m8def.dat"
    $crystal = 8000000
    
    Dim Sekundy As Byte
    Config Portd = Output : Led Alias Portd : Portd = &B11111111
    
    Do
    Gosub Odbior
    Led = Sekundy
    Wait 1
    Loop
    End
    
    Odbior:
    I2cstart
    I2cwbyte 11010000
    I2cwbyte 0
    
    I2cstart
    I2cwbyte 11010001
    I2crbyte Sekundy, Nack
    I2cstop
    Return
    
  • REKLAMA
  • #2 6262010
    Freddy
    Poziom 43  
    Logan :arrow: są takie dwie fajne biblioteki do Bascoma, DS1307RTC i DS1307clock ogólnodostepne.


    Usunąłem część wypowiedzi.
    [zumek]
  • REKLAMA
  • #3 6262025
    Kriti
    Poziom 15  
    A włączyłeś oscylator przez wpisanie CH=0 w rejestrze o adresie 0?

    Chodzi oczywiście o włączenie oscylatora przez wpisanie bitu CH jako 0.
    Wszystkich obrażonych słowem "zaneblować" przepraszam.

    Poprawiłem treść - regulamin p.8.2
    [zumek]
  • #4 6262592
    Logan
    Poziom 30  
    Próbowałem tak:

    
    $regfile "m8def.dat"
    $crystal = 8000000
    
    Config Portc = &B1111111 : Portc = &B1111111
    Config Sda = Portc.4
    Config Scl = Portc.5
    I2cinit
    
    Const Ds1307w = &HD0
    Const Ds1307r = &HD1
    
    
    Dim Sekundy As Byte
    Config Portd = Output : Led Alias Portd : Portd = &B11111111
    
    Do
    Gosub Odbior
    Led = Sekundy
    Loop
    End
    
    Odbior:
    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 0
    
    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte &B00000000 , Nack
    I2cstop
    Return
    
    oraz podobnie, ale ciągle bez efektu.
  • #5 6281436
    Logan
    Poziom 30  
    Dodam jeszcze, że przed zabawą z DS'em zmieniłem w Fusebit'ach wewnętrzny generator na zewnętrzny kwarc 8MHZ. Teraz wygląda to tak jak na obrazku, czy może to mieć jakiś wpływ na I²C ? Na kolejnym obrazku przedstawiam sposób realizacji komunikacji DS1307 na mojej płytce testowej.

    [ATmega8][BASCOM] DS1307, 7 diod LED, kod BCD. Na wyjściu ciągle 1.

    [ATmega8][BASCOM] DS1307, 7 diod LED, kod BCD. Na wyjściu ciągle 1.
  • #6 6285445
    Freddy
    Poziom 43  
    Logan :arrow: zapoznaj sie z dokumentacją układu i wskazanymi bibliotekami.
    DS1307 trzeba zainicjować.
  • #7 6286858
    Logan
    Poziom 30  
    W dokumentacji wyczytałem, że w celu inicjacji trzeba wyzerować bit CH. Wydawało mi się, że to właśnie robię:

    
    I2cstart 
    I2cwbyte Ds1307w 
    I2cwbyte 0 
    
    I2cstart 
    I2cwbyte Ds1307w 
    I2cwbyte &B00000000 , Nack 
    I2cstop 
    


    Postanowiłem sprawdzać instrukcje krok po kroku przy pomocy zmiennej Err. Okazało się, że polecenie
    
    I2cwbyte Ds1307w 
    

    zwraca 1. Adres próbowałem podawać binarnie, szesnastkowo oraz dziesiętnie... bez efektu. Biblioteki posiadam, ale chciałem całą procedurę zrealizować "ręcznie". Tak dla nauki :)
  • REKLAMA
  • #8 6299082
    Logan
    Poziom 30  
    Czy możliwe, że kość jest uszkodzona ?
  • REKLAMA
  • #9 6299487
    zumek
    Poziom 39  
    Logan napisał:
    Czy możliwe, że kość jest uszkodzona ?

    A co z baterią :?: Czy napięcie na pinie Vbat, mieści się w dozwolonym zakresie :?: Ze opisu na schemacie wynika, że napięcie baterii jest za wysokie.
  • #10 6299577
    Logan
    Poziom 30  
    Tak, baterie też brałem pod uwagę, rozładowałem ją ponieważ nie mam możliwości fizycznego odłaczenia jej.
  • #11 6299795
    zumek
    Poziom 39  
    Logan napisał:
    Tak, baterie też brałem pod uwagę, rozładowałem ją ponieważ nie mam możliwości fizycznego odłaczenia jej.

    Ile V wynosi napięcie na Vbat, jak układ(płytka edukacyjna) pracuje :?:
    Miewałem kłopoty, jak Vbat>3.3V mimo że w dok. max=3.5V
  • #12 6299819
    Logan
    Poziom 30  
    Próbowałem od prawie całkowitego rozładowania (troche powyżej 1V) aż do 4V.
  • #13 6300366
    elektryk2000
    Specjalista urządzeń chłodniczych
    A ja miałem cuda niewidy jak skonfigurowałem "doładowywanie" aku jak na tym schemacie z PROPOX'u (JP7).
    DS1307 chyba powinien pracować z baterią 3V. Dałem CR2032 bez żadnego doładowywania i nie ma żadnych problemów.
  • #14 6300385
    Freddy
    Poziom 43  
    A gdzie masz podłączony kwarc, według dokumentacji ma być jak najbliżej układu !.
    [ATmega8][BASCOM] DS1307, 7 diod LED, kod BCD. Na wyjściu ciągle 1.
  • #15 6300727
    Logan
    Poziom 30  
    :arrow: elektryk2000 z tą zworką też kombinowałem, ale bez efektu.
    :arrow: Freddy, kwarc jest bardzo blisko układu, biegnie pod nim masa.

    [ATmega8][BASCOM] DS1307, 7 diod LED, kod BCD. Na wyjściu ciągle 1.
  • #16 6301161
    Freddy
    Poziom 43  
    Hhhmmm, ja stosuję poniższy schemat. Miałem raz wypadek że przy lichym kwarcu nie działało poprawnie. Poszło dopiero jak przylituwałem go bezpośrednio do nóżek.
    [ATmega8][BASCOM] DS1307, 7 diod LED, kod BCD. Na wyjściu ciągle 1.
    ALe zaraz zaraz, czyżbyś walnął gafę, jak ty czytasz sekundy ?
    Powinno być tak
    
      I2cstart 
      I2cwbyte Ds1307r 
      I2crbyte _sec , Ack
    

    a u Ciebie jest tak:
    
    Odbior: 
    I2cstart 
    I2cwbyte Ds1307w 
    I2cwbyte 0 
    
    I2cstart 
    I2cwbyte Ds1307w 
    I2cwbyte &B00000000 , Nack 
    I2cstop 
    Return 
    

    Gdzie tutaj chcesz czytać ? nie widzę I2crbyte
    albo tak:
    
    Odbior: 
    I2cstart 
    I2cwbyte 11010000 
    I2cwbyte 0 
    
    I2cstart 
    I2cwbyte 11010001 
    I2crbyte Sekundy, Nack 
    I2cstop 
    Return
    

    brakuje &B przy 11010001 i przy 11010000
  • #17 6303931
    Logan
    Poziom 30  
    :arrow: Freddy, przylutowałem kwarc bezpośrednio do nóżek układu, dalej nie działa. Ten kod:

    
    Odbior: 
    I2cstart 
    I2cwbyte Ds1307w 
    I2cwbyte 0 
    
    I2cstart 
    I2cwbyte Ds1307w 
    I2cwbyte &B00000000 
    I2cstop 
    Return 
    

    ma realizować tą funkcję:
    Cytat:

    Bit 7 of Register 0 is the clock halt
    (CH) bit. When this bit is set to 1, the oscillator is disabled. When cleared to 0, the oscillator is enabled.

    Tak więc tym kodem starałem się aktywować oscylator. Znaczek "&B" faktycznie zgubiłem, ale zaraz się zorientowałem i poprawiłem :)
  • #18 6308014
    Freddy
    Poziom 43  
    Podaj cały kod, bo dajesz raz jeden kawałek a raz inny, nie pisząc o tym. Może to doprowadzić do nieporozumień
  • #19 6311113
    Logan
    Poziom 30  
    Freddy napisał:
    Podaj cały kod, bo dajesz raz jeden kawałek a raz inny, nie pisząc o tym. Może to doprowadzić do nieporozumień


    To dlatego, że próbowałem różnych wersji.
    Na początek programuje kod mający na celu aktywację oscylatora:

    
    $regfile "m8def.dat"
    $crystal = 8000000
    
    Config Sda = Portc.4
    Config Scl = Portc.5
    I2cinit
    
    I2cstart
    I2cwbyte &B11010000
    I2cwbyte &H0
    I2cwbyte &B00000000
    I2cstop
    
    End

    Następnie zakładając, że Ds1307 już pracuje próbuję odczytać czas, a raczej jakikolwiek znak życia:
    
    $regfile "m8def.dat"
    $crystal = 8000000
    
    Config Portd = Output : Led Alias Portd : Portd = &B11111111
    
    Config Sda = Portc.4
    Config Scl = Portc.5
    I2cinit
    
    Dim Czas As Byte
    
    Do
    I2cstart
    I2cwbyte &B11010000
    I2cwbyte &H0
    I2crbyte Czas , Nack
    I2cstop
    Led = Czas
    Wait 1
    Loop
    End


    Diodę LED mam podłączoną pod portd.0, dioda nie daje znaku życia.
  • #20 6311899
    Freddy
    Poziom 43  
    Czy masz podpięty akumulator 3V do DS1307 ?
    Czy masz dobrze wpiętą diodę ?
  • #21 6312062
    Logan
    Poziom 30  
    Freddy napisał:
    Czy masz podpięty akumulator 3V do DS1307 ?
    Czy masz dobrze wpiętą diodę ?


    Tak, mam podłączony akumulatorek, szczegóły podałem kilka postów wcześniej. Dioda musi być dobrze ponieważ jest to płytka testowa i nie ma możliwości innego podłączenia.
  • #22 6336097
    Logan
    Poziom 30  
    Wlutowałem nową kość i wszystko działa :)
REKLAMA