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

Bascom AVR 1.11.7.3 - Zawieszanie się programu przy transmisji i2c na AVR

KJ 11 Cze 2005 02:11 2278 10
REKLAMA
  • #1 1567924
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Witam przekopałem forum i help-a do bascoma AVR mam wersję 1.11.7.3 doczytałem się jedynie że w którymś momencie coś zmieniono w obsłudze i2c ale nie wiem co i jak z tego skorzystać :/ mój programik ma na celu przeszukanie adresów i wyświetlenie na których są układy jest przerobiony z 8051 gdzie działał poprawnie i był pomocny zwłaszcza przy bardziej rozbudowanych układach a teraz nie potrafię go uruchomić na AVR zawiesza się w momencie transmisji i2c :/

    Config Sda = Portd.7
    Config Scl = Portd.5
    
    Config Lcd = 16 * 2
    Cursor Off
    
    Dim Adres As Byte
    Locate 1 , 1
    Cls
    Lcd "Start"
    
    For Adres = 0 To 250 Step 2                                 'wykionuje petle for w zakresie 0-250 co 2
       I2cstart                                                 'start i2c
       I2cwbyte Adres                                           'wyslij adres
       I2cstop
       Waitms 50
       Locate 1 , 1
       If Err = 0 Then
          Cls                                                   'jesli nastapila odpowiedz
          Lcd "Uklad pod:" ; Adres
          Wait 1                                                'wyswietl adres
       Else
         Cls
         Lcd "Brak ukl."
         Lowerline
         Lcd ; Adres
                                                 'w przeciwnym wypadku ....
       End If
      Waitms 100
    Next Adres
    Cls
    Lcd "Koniec"
    End
  • REKLAMA
  • REKLAMA
  • #3 1567974
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Raczej wątpię aby $crystal miał znaczenie jeśli kwarc jest zdefiniowany w ustawieniach. Program zawisa na poleceniu I2cwbyte Adres na magistrali jest jeden scalak na pewno sprawny procesor (AT90S2313) też jest na pewno sprawny testowałem 2szt na obu to samo.
  • REKLAMA
  • #4 1568197
    Jaca
    Poziom 32  
    Posty: 1332
    Pomógł: 239
    Ocena: 217
    Podwieś linie SDA i SCL przez rezystory 4.7 k do Vcc i nie zapomnij dodać polecenia I2cinit na początku programu.
  • #5 1568214
    crazy_phisic
    VIP Zasłużony dla elektroda
    Posty: 2244
    Pomógł: 278
    Ocena: 130
    A skąd wiesz że program wisi przy próbie wysłania bajtu na I2C?.... kwestia schematu polączeń - rezystory 4,7k do plusa na obu liniach, 10k na Reset uP i oczywiście pewnie dzialające kwarc

    Pozdrawaim
  • #6 1568236
    Kelas
    Poziom 18  
    Posty: 371
    Pomógł: 12
    Ocena: 4
    KJ: Bascom baaardzo czesto, niewiadomo dlaczego ignoruje ustawienie wartosci kwarcu z ustawien. Najlepiej dla pewnosci dac jedna linijke wiecej, ktora i tak miejsca w procku nie zajmie :)
  • #7 1568317
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    To że program wisi na wysyłaniu wiem stąd że wywaliłem na chwile z programu polecenie I2cwbyte Adres i wtedy na LCD pojawiają się kolejne adresy czyli cała reszta programu działa. wprowadziłem $crystal i nic to nie zmieniło :( Mam podcagajonce 10k bo innych nie miałem nie wydaje mi się aby przy jednym scalaku na magistrali był to problem no ale cóż poszukam jeszcze 4.7 i wstawię
  • REKLAMA
  • Pomocny post
    #8 1568520
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Nota katalogowa przeczytana ? Które wyprowadzenie to PORTD.7 ? ;)
    Config Sda = Portd.7
    Może powinno tam być PORTB.7 dla SDA i PORTB.5 dla SCL ? No i oczywiście programator ISP odłączony... Bez podania schematu dalej nie rozmawiam... ;)
  • Pomocny post
    #9 1568696
    crazy_phisic
    VIP Zasłużony dla elektroda
    Posty: 2244
    Pomógł: 278
    Ocena: 130
    Light'I napisał:
    Nota katalogowa przeczytana ? Które wyprowadzenie to PORTD.7 ? ;)
    Config Sda = Portd.7
    Może powinno tam być PORTB.7 dla SDA i PORTB.5 dla SCL ? No i oczywiście programator ISP odłączony... Bez podania schematu dalej nie rozmawiam... ;)


    Jeslli mowimy o 2313 to faktycznie nie ma wyprowadzenia zewnetrznego pd.7 wiec nalezy to zmienic.... chyba ze autor programuje inny typ procesora
  • #10 1568915
    KJ
    Poziom 31  
    Posty: 2370
    Pomógł: 68
    Ocena: 945
    Nawyki 51kowe dały o sobie znać ;) byłem święcie przekonany że nie ma pinu Portd.6 tak jak w 2051 nie ma p3.6 ;) i stąd problemy. Notę przejrzałem pobieżnie dawno temu i nie zwróciłem uwagi na to.
  • #11 1569499
    hunterhouse
    Poziom 26  
    Posty: 893
    Pomógł: 84
    Ocena: 3
    kiedyś robiłem podobny programik i chciałem powiedzieć że brakuje ci jednej żeczy a mianowicie na początku pętli za każdym razem należy zerować zmienną err .
    bascom ustawia ją w przypadku błędu ale nie zeruje w przypadku powodzenia.

Podsumowanie tematu

✨ Problem dotyczy zawieszania się programu napisanego w Bascom AVR 1.11.7.3 podczas transmisji I2C na mikrokontrolerze AVR (AT90S2313). Program ma za zadanie skanować adresy na magistrali I2C i wyświetlać obecność układów, jednak zawiesza się na poleceniu I2cwbyte Adres. Dyskusja wskazuje na kilka potencjalnych przyczyn: brak inicjalizacji magistrali I2C poleceniem I2cinit, niewłaściwe podciągnięcie linii SDA i SCL rezystorami 4.7 kΩ do Vcc, błędne przypisanie pinów (Portd.7 i Portd.5 zamiast Portb.7 i Portb.5 dla AT90S2313, który nie posiada Portd.7), a także konieczność zerowania zmiennej Err na początku każdej iteracji pętli, gdyż Bascom nie zeruje jej automatycznie po udanej transmisji. Dodatkowo, pomimo zdefiniowania kwarcu w ustawieniach, Bascom może ignorować tę wartość, dlatego zaleca się jawne zadeklarowanie $crystal. Wskazano również na konieczność odłączenia programatora ISP podczas działania magistrali I2C. Autor potwierdził, że problem wynikał z nawyków programowania dla 8051 i błędnego przypisania pinów, co po korekcie pozwoliło na poprawne działanie programu.
Wygenerowane przez model językowy.
REKLAMA