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

[ATmega32][BASCOM]DS1820 - brak komunikacji

bartas87poz 20 Sty 2011 13:49 3351 24
  • #1 9031856
    bartas87poz
    Poziom 9  
    Witam,

    Jestem w trakcie tworzenia układu i utknąłem na właśnie tym czujniku...
    W programie używam przerwań do komunikacji z Ethernetem. Ale pomiar temperatury wykonuje albo przed włączeniem przerwań albo na pomiar je wyłączam.

    Problem pojawia się na samym początku:
    If Err = 1 Then
    Blad = 1
    End If

    program zawsze zwraca mi Err = 1 -> Blad = 1
    Wskazuje na to ze nie widzi w ogóle czujnika.

    Kupiłem już 3 DS-y (2 podobno DS1820 a teraz DS18S20)
    Podłączam go na 2 sposoby:
    przez 3 kabelki z rezystorem podciągającym (GND, DQ - rezystor podciągający, VCC)
    przez 2 kabelki też z rezystorem podciągającym (GND połączone z VCC do masy, DQ z rezystorem podciągającym)

    - czyli tak jak dokumentacja pokazuje

    Użyte kody:

    
    $regfile = "m32def.dat"
    $crystal=11059200
    Dim Blad As Bit 
    Config 1wire = PortB.1 
    Dim T(2) As Byte                      
    Blad = 0 
    
    1wreset                                              
     If Err = 1 Then                                        
         Blad = 1 
     End If 
    
    1wwrite &HCC                      
    1wwrite &H44                                                
    Waitms 750                                              
    1wreset                                            
    1wwrite &HCC                                      
    1wwrite &HBE                                
    T(1) = 1wread()                                    
    T(2) = 1wread()                                        
    1wreset                                                  
    If T(2) > 0 Then                                      
    T(1) = 256 - T(1)                                          
    End If 
    T(1) = T(1) / 2 
    


    albo:

    
    $regfile = "m32def.dat"
    $crystal=11059200
    Dim Blad As Bit 
    Config 1wire = PortC.3 
    Dim Nr_ukladu(8) As Byte                                    
    Dim I As Byte                                              
    Dim T(2) As Byte                                        
    Dim Temp As Single                                  
    Dim Otrzymana_temperatura As String * 5                        
    Blad = 0 
    
    1wreset                                                  
    Nr_ukladu(1) = 1wsearchfirst()                          
    If Err = 1 Then 
       Blad = 1                                                                                        
    End If 
    
    1wreset                                              
    1wwrite &HCC                                        
    1wwrite &H44                                            
    Waitms 750                                            
    
    1wreset                                              
    1wwrite &H55                                      
    For I = 1 To 8 
        1wwrite Nr_ukladu(i)                                    
    Next I 
    
      1wwrite &HBE                                              
      T(1) = 1wread()                                          
      T(2) = 1wread()                                          
      1wreset                                                  
    
      If T(2) = 0 Then                                        
         Temp = T(1) / 2                
      Else                                
         I = 256 - T(1)                          
      End If 
      Otrzymana_temperatura = Fusing(temp , "#.&") 
    


    Zmieniałem piny uC
    Zmieniłem DS-y
    Zmieniałem podłączenia (2-3 przewodowe)

    i zawsze Err = 1
    ale wartość:
    T(1)=255
    T(2)=255

    Czyli zwraca same jedynki...

    Problemu z podłączeniem nie ma - sprawdzałem już to chyba z 100 razy
    Może czasy nie są zachowane takie jak powinny?

    Może kwarc jest popsuty? A przy DS może być $crystal=11059200
    może 12 albo inny?

    Wiem że wysyła sygnał bo wrzuciłem w pętlę funkcje 1wreset i napięcie z 5 spadło do 2,5V wiec uwzględniając czułość woltomierza to jakieś sygnały tam idą (czasów nie jestem w stanie sprawdzić - oscyloskopu nie mam)

    pomysły?
  • #2 9033964
    Ciapol
    Poziom 24  
    1wirecount() też zwraca 0?
  • #5 9037229
    bartas87poz
    Poziom 9  
    Ciapol: sprawdzałem to 1wirecount() też zwraca 0 czyli nie widzi urządzenia.

    M. S.: poruszyłeś temat fusebitów - nic wcześniej o nich nie widziałem, dopiero teraz się zorientowałem mniej więcej do czego służą. I jak zauważyłem mam ustawione wszystko domyślnie czyli korzystał z wewnętrznego oscylatora.

    Spróbowałem dokonać zmiany
    [ATmega32][BASCOM]DS1820 - brak komunikacji

    wybrałem ostania opcję 101000 - 8-12MHz
    i przestał mi się komunikować z BASCOMem - obecnie mam wlutowany kwarc zewnętrzny z kondensatorami 12MHz

    z podpowiedzi wynika że chciałem ustawić kwarc zewnętrzny 12MHz a komunikacja się zerwała czyżbym złe wybrał ustawienia ...

    to jaki tam kwarc powinien być ? uda mi się z nim jakoś połączyć... ?
  • #7 9037333
    piotrva
    VIP Zasłużony dla elektroda
    kolega xury dokładnie wyłuszczył problem.
    budujesz oscylator według schematu z noty katalogowej procesora w dziale dotyczącym taktowania. (oczywiście wcześniej kwarc trzeba wylutować :D)
    potem odpowiednie ustawienie częstotliwości i powinno śmigać. Bo 1wire przy źle ustawionej częstotliwości właśnie nie działa jak powinno :D
    nota:
    http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf
    strona 28
  • #8 9037412
    bartas87poz
    Poziom 9  
    tak wybrałem ostania pozycje z mojego skrina...
    czyli teraz żeby uruchomić komunikacje musiałbym mieć jakiś układ co przywraca ustawienia fabryczne fusebitów albo stworzyć taki generator RC

    z dokumentacji wynika że powinien on tak wyglądać?
    [ATmega32][BASCOM]DS1820 - brak komunikacji

    A jakie dobrać wartości aby taka częstotliwość wytworzyć?
  • #9 9037425
    M. S.
    Poziom 34  
    Cytat:
    poruszyłeś temat fusebitów - nic wcześniej o nich nie widziałem


    No to się nie dziwię, że nie działa. ATMEGA32 na końcówce, którą wybrałeś do DS1820 fabrycznie obsługuje JTAG. Żeby końcówka ta pracowała jak zwykły port trzeba JTAG'a w fusach wyłączyć.

    [ATmega32][BASCOM]DS1820 - brak komunikacji
  • #10 9037475
    bartas87poz
    Poziom 9  
    Ja akurat zmieniałem końcówki, obecnie korzystam z programu zamieszczonego na samym początku gdzie odwołuje się do PortB.1 a on chyba nie korzysta z JTAG (na tym pinie też nie działała komunikacja).

    Ale przypuszczam ze ustawiony był wewnętrzny generator, bo nic nie zmieniałem w fusebitach, a w programie miałem zdeklarowany $crystal=11059200 (obecnie 12MHz).

    Teraz wiem gdzie mam luki w wiedzy i na pewno stopniowo będę to nadrabiać.

    Teraz jednak muszę przywrócić moja Atmege do życia... wiecie może jak dobrać parametry R i C aby uzyskać częstotliwość w zakresie 8-12MHz ... jest to możliwe?
  • #11 9037502
    M. S.
    Poziom 34  
    Elementy RC nie muszą pracować na częstotliwości zadeklarowanej w programie. Wystarczy, żeby generator ruszył. Chodzi o nawiązanie kontaktu z MEGĄ przez programator. Później przestaw fusy na taki generator, który chcesz mieć na stałe. Jeśli podłączasz kwarc około 12MHz to na moim obrazku jest pokazane ustawienie prawidłowe właśnie dla niego.

    Cytat:
    Ale przypuszczam ze ustawiony był wewnętrzny generator


    Na pewno! 1MHz. Komunikacja z DS była niemożliwa, chyba, że Crystal byłby równy 1000000.

    P. S. W niektórych programatorach i programach jest możliwość zmiany szybkości programowania. Jeśli będzie ona za duża to z programowania będzie kicha.
  • #12 9037554
    piotrva
    VIP Zasłużony dla elektroda
    zerknij sobie tu:
    http://img.bazarek.pl/137013/10697/964750/7793539164bcc57da330b0.jpg
    masz np. 2,2 K Ohm rezystor i 22 pF kondensator.
    Częstotliwość nie ma znaczenia
    Podpinasz to pod pin XTAL1 i próbujesz połączyć się z prockiem za pomocom programatora i ustawiasz odpowiedni zegar (Ext. Crystal Osc. 8MHz - ...) albo po prostu wszędzie jedynki mają być :D wtedy się nie pomylisz :D
  • #13 9037769
    bartas87poz
    Poziom 9  
    Rozumiem że mam wybrać ostanie ustawienie (zaznaczone)
    Chciałbym się upewnić zanim znowu coś na grzebie.

    [ATmega32][BASCOM]DS1820 - brak komunikacji

    Mam kwarc 12 000 000 Hz i 11 059 200 Hz
  • #15 9037838
    piotrva
    VIP Zasłużony dla elektroda
    dokładnie, ostatnie ustawienie na pewno zadziała, możesz wybrać też przed ostatnie (różnią się tylko czasem startu procesora po podaniu zasilania)
    oczywiście po tej zmianie znów stracisz komunikację z prockiem (nie przestrasz się) i będziesz musiał spowrotem podłączyć kwarc i wtedy powinno działać :D
  • #16 9038176
    bartas87poz
    Poziom 9  
    Zrobiłem ten generator RC udało mi się połaczyć z Atmega.
    Wybrałem ostanie pozycje (ta co jest zaznaczona - same jedynki)

    przylutowałem kwarc 12MHz uruchomiłem kompilator, za pierwszym razem się połączył, chciałem wgrać program, Wyskoczył error fusebit, nacisnąłem ok (nic innego nie było do wyboru) i w tej chwili zerwał komunikacje i już nie znajduje mikrokontrolera, skasowały mu się ustawienia?
    Znowu RC przylutować?
  • #18 9040290
    bartas87poz
    Poziom 9  
    Niestety nie działa...

    Spróbowałem na kwarcu 12 000 000 Hz i 11 059 200 Hz
    na generatorze RC

    i już połączyć się z nią nie mogę. Co ja w takim razie ustawiłem?
    Na pewno nie RC bo by ruszył. Jakieś pomysły?
  • #19 9040783
    piotrva
    VIP Zasłużony dla elektroda
    może ustawiłeś external clock?
    jeśli tak to podpinasz pod XTAL1 sygnał zegarowy zrobiony na np. ne555 lub innym procesorze (zapal/zgaś pin w kółko)
    jak to nie pomoże to wtedy musiałbyś budować to:
    https://www.elektroda.pl/rtvforum/topic1716521.html
    bo wtedy mogłeś w "fusach" zmienić jeszcze:
    1. wyłączenie interfejsu SPI
    2. wyłączenie resetu
    i wtedy Twój programator na nic się nie zda... (najlepiej wtedy wykonać tego fusebitdoctor'a)
    jeżeli to nie pomoże, to wstaw procesor na półkę, i kup sobie nowy i się nie zniechęcaj
    bo ja w swoich początkach zablokowałem parę atmeg2560 z rzędu
    a może jak się podszkolisz to kiedyś odblokujesz tego procka :D
    ja się chyba dziś zabiorę za badanie tych atmeg z dna szafki :D
  • #20 9040955
    bartas87poz
    Poziom 9  
    Działa to trochę zniechęcająco ... nie ukrywam.

    Byłem dzisiaj w od rana w sklepie i zakupiłem kwarc 8MHz i 16MHz z nadzieją że może ruszy na innych - sprawdziłem na obu i niestety nie ruszył

    Tego doktora na pewno narazie nie zrobię, może kiedyś ...

    Ale zakupiłem od razu nową ATmege32-16PU (poprzednią też taką miałem)
    jakbym wiedział to tego NE555 tez był kupił ale teraz już nie zdążę.

    Wymieniłem BASCOM widzi od razu ten procesor, teraz mam pytanie:
    Wszedłem w zakładkę fusebit-ów i kompilator pobiera od razu aktualne ustawienie ich z danego procesora czy pamięta ostatnią zmienię? Boje się wgrać program żeby znowu nie nadpisał (o ile pamięta ostanie ustawienie) tej samej konfiguracji i znowu zerwał komunikację.

    Dla porównania mam jeszcze inny program i zamieszczam skriny z obydwóch:
    [ATmega32][BASCOM]DS1820 - brak komunikacji

    i drugi

    [ATmega32][BASCOM]DS1820 - brak komunikacji

    Jeśli jest to aktualne ustawienie fusebit-ów to przy kupnie tamtego był inne ustawienia fabryczne niż przy tym (tutaj niby zewnętrzny kwarc największej prędkości , a w poprzednim wewnętrzny 1MHz?)

    Jeszcze jedno, ja zmienię fusebit-ów wgrywałem przyciskiem "Write FS" a do czego służy "Write PRG"?
  • #21 9041160
    Raptor8999
    Poziom 12  
    Ja też mam podobny problem .
    Przerzuciłem się ostatnio na avr-y i nie mogę dojść do ładu z ustawieniem zegara w attiny 2313. fusy mam ustawione na zewnętrzny oscylator według tej strony :
    http://www.engbedded.com/fusecalc/

    , mam podłączony kwarc 11059200 Hz , a sekunda trwa w tym momencie 7 sekund . Jeżeli ustawię na wewnętrzny oscylator to też się nie zgadza . Według oscyloskopu cyfrowego ustawiłem w kompilatorze częstotliwość kwarcu na 684600 Hz , i teraz sekunda jest sekundą . Ale co z tego jak nadal nie działa mi i2c ani 1wire , jedynie na lcd mogę coś wyświetlić . Na 89c2051 nie miałem problemu z niczym a z tym avr-em siedzę już drugi dzień i nadal nie potrafię ruszyć z miejsca.
  • #23 9041226
    M. S.
    Poziom 34  
    Tiny2313 ma na zegarze preskaler dzielący przez 8. Musisz go wyłączyć - w fusach oczywiście.

    Co do fusów, w Bascomie przy zakładce fusy jest przycisk Refresh. Jak go klikniecie fusy zostaną odczytane z uC. Poprawcie tylko to co trzeba i zapiszcie (jedna zmiana, jeden zapis).
    Używam Bascoma już długie lata i nie "udało" mi się nieświadomie zablokować żadnego uC. Ten program uznaję za najbezpieczniejszy dla uC.

    P. S. Procki mają ograniczoną ilość programowań. Jedne egzemplarze wytrzymują długo, a inne krócej. Ostatnio przy jednym projekcie wykończyłem 2 ATMEGI16 w obudowie SMD. Pilnujcie żeby podczas programowania procek był zasilany.
  • #24 9041308
    Raptor8999
    Poziom 12  
    Dziękuje kolego M.S. , teraz już wszystko jest ok .
  • #25 9041822
    bartas87poz
    Poziom 9  
    Ja również dziękuje. Mimo, że jedna ATmega już leży na półce i nie mogę się do niej podłączyć, to na tej już od początku było ustawione tak jak w skrinach powyżej i po przylutowaniu kwarcu chodzi bez problemu - widać różnice prędkości (reszta mojego programu jest momentami wymagająca dla uC przez co mogłem odczuć zmienne prędkości) - komunikacja z DS1820 ruszyła i chodzi według kodu zamieszczonego na samym początku.

    Dziękuję wszystkim za zainteresowanie i pomoc
REKLAMA