Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATTINY13 i BascomAVR - problem z uruchomieniem

greg_matrix 27 Sty 2006 00:12 2232 19
  • #1 27 Sty 2006 00:12
    greg_matrix
    Poziom 16  

    Witam wszystkich,
    Jeśli znajdzie sie ktoś zorientowany w temacie i będzie potrafił coś doradzić to z góry dziękuję za odzew!

    Sprawa wygląda tak: Mikrokontroler ATTINY13 firmy AMTEL, na początek postanowiłem napisać jakiś banalny program- zaświecanie i gaszenie 3 LED po kolei, jako język wybrałem BASCOM (bo też chyba tak łatwiej na początek). Mam kompilator w wersji 1.11.8.1. Programator szeregowy podłączany do portu drukarki, o ile się orientuję jeden z najbardziej popularnych do tych układów.

    Program jest, błędów chyba nie ma (bo i nie bardzo jest gdzie). Wygląda na to, że się ładnie wpisuje do mikrokontrolerka, test porównujący zawartość Flash i pliku BIN w komputerze daje wynik "Verify OK". Czyli program jak sądzę siedzi już w układzie, powinno być OK. Odłączam więc kabelek programatora.

    PROBLEM: polega na tym, że układ nie robi NIC. LED są oczywiście wpięte przez oporniki do +5V, nie świecą, nie mrugają (na pewno są wpięte w dobrą stronę). Woltomierz też pokazuje 0V na wszystkich wyjściach. Nie jest to raczej popsuty scalak, kupiłem od razu kilka sztuk i to już 3-ci i zachowuje się tak samo.

    Druga dziwna sprawa jest taka, że po odłączeniu kabelka którym idzie +VCC z portu drukarki układ w dalszym ciągu współpracuje z komputerem (innego zasilania nie ma)! Można wykasować pamięć, zapełnić ją... dziwne.

    Dodam, że nie kombinowałem nic z Fuse ani Lock bajtami. Standardowe ustawienie zegara to 9,6 MHz, opóźnienie 14CK + 64ms.


    Jeśli ktoś natknął się na podobny problem, albo nawet wie co począć to bardzo chętnie posłucham.

  • #2 27 Sty 2006 00:42
    rejestr007
    Poziom 16  

    Witam!
    Jeśli program jest prawidłowo napisany to może coś z resetem? Standartowo powinien być rezystor 47k do +5V. Po zaprogramowaniu odłącz programator i z resetuj zwierając do masy, może wtedy zaskoczy. Kolejna uwaga to, iż standartowo zegar jest ustawiony na 9,6MHz ale też standartowo w "fuse low byte" jest ustawiony bit CKDIV8 powodujący podział zegara przez 8. Mikrokontroler jest wtedy taktowany z częstotliwością niewiele większą niż 1 MHz!
    Pozdrawiam

  • #3 27 Sty 2006 08:33
    ELTom2
    Poziom 12  

    Trochę dziwne jeśli podłączyłeś diody do +5V a na portach masz 0V to w takim razie prąd musi płynąc przez diodę, może masz za duże oporniki przy Ledach? A no i na pewno reset podłącz przez rezystor do +5V!

  • #4 27 Sty 2006 11:21
    greg_matrix
    Poziom 16  

    Przede wszystkim dziękuję za zainteresowanie. Dzisiaj rano wypróbowałem rady kolegów. Albo coś w dalszym ciągu robię nie tak albo to po prostu nie to co u mnie szwankuje. Opiszę krótko kolejne kroki:

    1. odłączam zewnętrzne zasilanie
    2. wpinam opornik 47k między reset (PB5) a +5V
    3. podłączam kabelek programatora
    4. programuję (komunikat "Verify OK")
    5. odłączam kabelek programatora

    Po włączeniu zasilania zewnętrznego jest to co było, czyli nic. Próbuję więc zresetować układ wg rady. Przyszły mi do głowy 3 warianty, do poprzednich kroków dochodzi:

    a)
    6. pin reset (czyli PB5) łaczę na chwilę z masą, po czym odłączam
    7. włączam zasilanie zewnętrzne

    b)
    6. najpierw podłączam zasilanie
    7. potem resetuje podpinając reset do masy

    c)
    6. reset do masy
    7. włączam zasilanie po czym odłączam reset

    Efekt taki sam... Po podłączeniu zasilania nie dzieje sie nic ciekwaego, po prostu zera na wyjściu i tyle (jeśli podepnę LED to napięcie zmienia się na wyższe w taki sposób, że płynie prąd 0,01 mA, czyli wygląda na to że to mierzone zero to nie jest stan logiczny, ale coś co "wisi w powietrzu"). Powoli zaczynam odnosić wrażenie, że wypróbowałem juz wszystkie możliwości... Nie jestem pewny, czy jest bezpiecznie robić zwarcie do masy pinu z resetem kiedy kabel programatora jest wciąż podpięty, więc tego nie próbowałem.

    PS
    PB5, czyli ten pin który pełni funkcję resetu docelowo będzie używany (wejście przetwornika ADC), więc odpada "zawieszanie" na nim opornikana stałe.

    PS2
    Podział częstotliwości przez 8 jest domyślnie ustawiony, nie zmieniałem tego.

  • #5 27 Sty 2006 11:37
    maxiu25
    Poziom 16  

    w avrach trzeba ustawiac porty jako wejscia lub wyjscia moze tu msz blad lub jakie masz kondensatory przy kwarcu
    ja w atmega 8515 i at90s2313 oraz 1200 reset zostawiam w powietrzu i wszystko dziala
    sprawdz fuse bity

  • #6 27 Sty 2006 11:37
    Zaquadnik
    Poziom 27  

    Jakim programatorem programujesz ? Bo jeśli jest to zwykły STK - 200 to wymaga on zazwyczaj zasilania z układu, któru jest programowany, by zasilić bufory trójstanowe, więc nie powinieneś odłączać zasilania od procka. Choć dziwnym jest komunikat Verify OK.

  • #7 27 Sty 2006 12:01
    greg_matrix
    Poziom 16  

    Programator kupiłem na Allegro, jest to
    "Programator ISP-AVR (In System Programming) programuje mikrokontrolery firmy Atmel z rodziny AVR, jest zgodny z programatorami STK200+/300"

    W tym scalaku jest wewnętrzny generator. To jest układ 8-nóżkowy, +5V, masa i 6-pinowy PortB. Piny ustawione są jako wyjścia, zresztą poniżej zamieszczam kod programu, bo jest bardzo krótki. LED na wyjściu 0 powinna mrugać, na wyjściu 1 powinna świecić a na wyjściu 2 powinno być +5V (zresztą przede wszystkim powinny pojawiać się odpowiednie napięcia na pinach, a nawet tego nie ma). Przecież w tak prostym programie nie może być błędu?? Tu chodzi o coś innego... tylko jeszcze nie wiem o co.

    Według dokumentacji producenta "Power-off sequence" wygląda tak:
    1. ustawić RESET (ten z kreską na górze, czyli to co jest na PB5) na "1" (czyli +5V)
    2. wyłączyć zasilanie układu

    Tego też próbowałem :-(
    Wspomniany kod:

    $regfile = "attiny13.dat"
    $crystal = 9600000

    Config Pinb.0 = Output
    Config Pinb.1 = Output
    Config Pinb.2 = Output

    Reset Portb.1
    Set Portb.2

    Do
    Reset Portb.0
    Waitms 500
    Set Portb.0
    Waitms 200
    Loop

    End

  • #8 27 Sty 2006 13:02
    ELTom2
    Poziom 12  

    A spróbuj w ten sposób ja tak mam i działa:

    $regfile = "attiny13.dat"
    $crystal = 9600000

    Ddrb = &B00000111

    Reset Portb.1
    Set Portb.2

    Do
    Reset Portb.0
    Waitms 500
    Set Portb.0
    Waitms 200
    Loop

    End


    Nigdy nie lubiłem korzystać z procedury config wole samemu ustawiać rejestry procesora. A rejestr Ddrb jest odpowiedzialny za konfiguracje pinów portu B.
    A z tym resetem to nie kombinuj za dużo. Po prostu podepnij go do zasilania przez rezystor i włącz zasilanie. Musi działać.

  • #9 27 Sty 2006 22:28
    M. S.
    Poziom 34  

    Zobacz do poczty, spróbuj i daj znać czy działa.

  • #10 27 Sty 2006 23:39
    Alpik
    Poziom 12  

    (..)
    Config Pinb.0 = Output
    (..)

    Powinno być chyba tak:

    Config Portb.0 = Output
    itd.

  • #11 28 Sty 2006 13:24
    greg_matrix
    Poziom 16  

    DZIAŁA!!! :-)
    Chciałem wszystkim bardzo podziękować za owocne dyskusje! Naprawdę!

    Sekwencja końcowa nie miała akurat znaczenia. Okazało się, że scalak wystartował po podłączeniu resetu do +5V... na ostro! Podłączenie przez opornik 47k ani przez 10k nic nie dało. Wypraktykowałem, że max opór przy którym układ rusza to ok 4,7k. 8,2k juz jest za dużo.

    Rzeczy, które moim zdaniem są wciąż nie tak:
    1. Opóźnienie wprowadzone przez instrukcję Waitms ma sie nijak do rzeczywistości (jest znacznie wieksze niż liczba jako parametr Waitms)
    2. W stanie kiedy żadna LED-ka nie świeci pobór prądu jest ponad 12mA, mam wrażenie że to jakby trochę dużo...
    3. Nie bardzo mam pomysł w jaki sposób można użyć wyprowadzenie na którym jest reset. To jest jedno z wejść/wyjść uC, nie wiem jeszcze w jaki sposób mozna go użyć, skoro scaczek nie startuje z resetem "w powietrzu"

    PS
    Wypróbowałem radę Alpik-a, żeby konfigurować porty nie przez Config Pinb.x =... tylko przez Config Portb.x=... Okazuje się, że efekt jest taki sam. Być może jest to pewnego rodzaju uproszczenie wprowadzone w najnowszej wersji Bascom (w końcu to jedna komenda mniej do zapamiętania).
    Podobnie rzecz się ma z komendą If ... Okazuje sie, że każdą komendę If... trzeba zakończyć pisząc End If. Czyli nie do końca jest jak przeczytałem w książce.


    Pozdrwaiam wszystkich!!!

  • #12 28 Sty 2006 16:49
    wicy
    Poziom 22  

    Cytat:
    Okazało się, że scalak wystartował po podłączeniu resetu do +5V... na ostro!

    Ja tak podłączam 90S2313, ale nie jest to chyba najlepsze rozwiązanie. Działa, ale procesor wstaje raz natychmiast a czasem aż po ok. 10sek. Nie wiem od czego to zależy, ale dla pewności działania chyba lepiej wygospodarować ciut miejsca dla układu resetującego DS???? (jak ktoś zna oznaczenia to poproszę podpowiedź)

  • #13 28 Sty 2006 17:27
    rejestr007
    Poziom 16  

    Układ do resetu to DS1813.
    Coś jednak musi być nie tak z konfiguracją wejść. Reset musi działać z rezystorem 47k i u mnie działa. Podłączenie go bezpośrednio do 5V może powodować tak duży pobór prądu. Pytanie czy scalak długo to wytrzyma?

  • #14 29 Sty 2006 22:39
    M. S.
    Poziom 34  

    Może należałoby programowo PortB.5 ustawić jako wejście. Zastosowane "siłowe" podciągnięcie Reset do VCC niczego dobrego nie wróży! PortB.5 jest alternatywny dla Resetu. Być może gdzieś w "fusach" został uaktywniony.

  • #15 30 Sty 2006 01:06
    greg_matrix
    Poziom 16  

    To samo przyszło mi na myśl. Okazuje się (sprawdziłem), że można odpalić uC ustawiając PB5 ustawić jako wejście. Można tego wejścia używać, ale pod warunkiem... że jest tam doprowadzone odpowiednio wysokie napięcie. Inaczej układ nie rusza. Czyli jest to tylko częściowa użyteczność... Jeśli bym chciał użyć tego portu np. do pomiaru napięcia, to tylko pewnien zakres wchodzi w grę.

    Ustaliłem też, że można PB5 skonfigurować jako wyjście i ustawić na nim poziom wysoki. Układ rusza bez problemu bez podłączania oporników, ale wtedy z kolei mamy jeden pin bezużyteczny. Też niedobrze. No ale zawsze to juz coś.

    Config Pinb.5=Output
    Set Portb.5
    Waitms 100

    Bez instrukcji opóźniającej nie chce startować, więc jest potrzebna. Niby to działa i wydaje się, że fajnie, ale pin PB5 niestety wyłączony z użytku. Próba ustawienia poziomu niskiego w trakcie działania programu nic nie daje. W ATTiny13 i kilku innych uC Amtela jest 8 nóżek i tylko 6 wejść/wyjść, ten jeden może być czasami akurat potrzebny.
    CZY KTOŚ WIE JAK GO UŻYĆ?



    pozdrawiam!

  • #16 04 Gru 2006 11:16
    amator77
    Poziom 10  

    Witam,
    Trochę czasu minęło wiec pewnie zainteresowani juz wiedzą ale może komuś sie przyda.
    Aby użyć pinu PB5 w ATtiny13 RSTDISBL musi być zaprogramowany (czyli 0)-jest to jeden z Fuse High Bytes.
    Należy jednak wziąść pod uwagę fakt,że po jego zaprogramowaniu stracimy możliwość kontaktu z uC poprzez programator ISP.Więc należy go zaprogramować po wgraniu programu będąc pewnym,że program się sprawdzi.

  • #17 05 Gru 2006 16:32
    greg_matrix
    Poziom 16  

    Dzięki za odpowiedź. Rzeczywiscie minęło już dużo czasu i odkryłem jak to zrobić. Z punktu widzenia BASCOM AVR (a tego używam) trzeba przestawić FUSE BIT wyłączający Reset. Czyli dokładnie tak jak piszesz.

    A tak swoją drogą- próbowałem robić jeszcze inny numer który może sie przydać w niektórych sytuacjach, zanim jeszcze mamy ostateczna wersję programu. Być może się przyda:

    U mnie akurat ten pin był potrzebny do kontroli napięcia zasilania procka, czyli Vmin ok 4V, Vmax ok 5,5V. Trzeba użyć takiego dzielnika napięciowego, żeby napięcie na tym pinie było bliskie 2,5V dla max zasilania i ustawić AVref na 2,56V. Wtedy można używać pinu jaki wejścia ADC i Restartu równocześnie. Tyle tylko, że zakres napięć wejściowych nie jest pełny- przy obniżaniu napiecia procek sie w końcu restartuje. W moim przypadku chodziło o wykonanie "czegoś-tam" przy zasilaniu=Vmin. Wstawiłem dzielnik 1:1 i wszystko działało. Widać więc, że 2V to jeszcze logiczne "1" jeśli chodzi o pin Resetu.

    Pozdrawiam!

  • #18 26 Gru 2006 21:45
    kjh_
    Poziom 9  

    Właśnie czytam co piszecie i muszę powiedzieć że miałem podobne problemy.
    Dziś jak widzę ,że ktoś pisze Config Pinb.x= ......A nie Config Portb.x= to smutek mi zieje wprost z oczu.Pisałem o tym na forum -program który w symulacji działał ( tu radzę by dobrze poznać możliwości symulatora) w układzie rzeczywistym nie działał (był martwy) ...----!!!! to właśnie robi nieprawidłowa konfiguracja portów w Bascom

  • #19 26 Gru 2006 22:07
    teedd
    Poziom 18  

    Witam.
    Cyt: Dziś jak widzę ,że ktoś pisze Config Pinb.x= ......A nie Config Portb.x= to smutek mi zieje wprost z oczu.
    Hmmm... A jesteś pewny tego, co piszesz? :D
    Pozdrowienia - teedd

  • #20 27 Gru 2006 11:12
    greg_matrix
    Poziom 16  

    Witam po Świętach!

    Ja tak od początku (jak się bawie mikrokontrolerami) konfiguruję piny i nie miałem problemów z tego powodu. Na poparcie cytat z "help" Bascoma:

    Syntax
    CONFIG PORTx = state
    CONFIG PINx.y = state


    Pewnie kolega kjh_ miał co innego na myśli:
    Wysyłanie stanu na wyjście to komenda PortX.N = ...
    Odczyt stanu danego pinu to komenda Zmienna = PinX.N

    pozdrawiam

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME