Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

AVR i Linuks

jang1200 11 Maj 2008 11:31 2103 15
  • #1 11 Maj 2008 11:31
    jang1200
    Poziom 9  

    Witam

    Kupiłem płytkę zl2avr, poskładałem ze swoich części i "już" drugi dzień mogę się cieszyć nową "zabawką" i po raz pierwszy jakiś mikroprocesorem. Kupiłem również książkę "Programowanie mikrokontrolerów AVR w języku BASCOM". Po dwóch latach nieużywania zainstalowałem windowsa i pakiet BASCOM AVR. Z książki przepisałem program zegara no i poprostu zegar działa :) natomiast pod linuksem znalazłem w końcu avrdude no i niby też działa ale tylko po wyłączeniu komutera ?
    W konsoli wpisałem

    Code:
    avrdude -c stk200 -p m8 -U flash:w:LISTING8.19.HEX
    program się wpisał do procesora a efekt "działania jest taki:
    Code:
    23:30:00
    
    23:30:01
    i tak naprzemian przeskakuje a po wyłączeniu komputera działa normalnie i nie bardzo wiem co z tym fantem począć ?
    Czy da się z tym coś zrobić czy też pod linuksem już tak jest, że trzeba procesor odłączyć od programatora (mam STK200) aby program działał ?

    Z góry dziękuję za wszelkie podpowiedzi.
    Pozdrawiam

    0 15
  • #2 11 Maj 2008 13:50
    piotr_go
    Poziom 28  

    Avrdude nie zgłasza jakichś błędów ?
    Fusebity ustawione prawidłowo ?

    Co do odłączania programatora, masz coś podpięte pod te same piny przez które się programuje?
    U mnie pamiętam że program działał z podpiętym programatorem ale zdaje sie miałem jakieś zakłócenia na pinach programowania.

    ==== update ====
    Odepnij od programatora tylko reset jeśli możesz i sprawdź czy występuje ten sam efekt. Jeśli sie poprawiło to pewnie jakiś inny program usiłuje sie dobrać w tym czasie do drukarki i stąd te zakłócenia.

    0
  • #3 11 Maj 2008 19:46
    jang1200
    Poziom 9  

    piotr_go dzięki za dobre chęci ale niestety dalej nic.
    Skorzystałem z Twojej podpowiedzi z drukarką i nawet odinstalowałem cupsys (przy okazji nie wiem dlaczego ale wysypał się xserver i dlatego dopiero teraz odpowiadam) i nic nie pomogło.
    Zrobiłem jeszcze kilka prób:
    - wylączyłem komputer - zegar działa, zalączyłem na nowo, zegar się resetuje ( w programie mam wpisane do zmiennej TIME$ czas "23:30") i pokazuje właśnie tą 23:30 i jeśli w grubie załączę windowsa to w momencie gdy pokazuje się napis ZAPRASZAMY to program się uruchamia i zegar normalnie działa.
    - po wyłączeniu komputera program się resetuje i zegar znowu zaczyna odliczanie od 23:30, znowu załączam i znowu reset procka i znowu na zegarze 23:30, grub uruchamia linuksa i dalej już ciągle to co napisałem w pierwszym poście -> 23:30:00 <-> 23:30:01.

    Jeśli chodzi o avrdude to :

    Code:
    avrdude: AVR device initialized and ready to accept instructions
    

    Reading | ################################################## | 100% 0.00s

    avrdude: Device signature = 0x1e9307
    avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
             To disable this feature, specify the -D option.
    avrdude: erasing chip
    avrdude: reading input file "/home/jang/LISTING8.19.HEX"
    avrdude: input file /home/jang/LISTING8.19.HEX auto detected as Intel Hex
    avrdude: writing flash (1044 bytes):

    Writing | ################################################## | 100% 0.32s

    avrdude: 1044 bytes of flash written
    avrdude: verifying flash memory against /home/jang/LISTING8.19.HEX:
    avrdude: load data flash data from input file /home/jang/LISTING8.19.HEX:
    avrdude: input file /home/jang/LISTING8.19.HEX auto detected as Intel Hex
    avrdude: input file /home/jang/LISTING8.19.HEX contains 1044 bytes
    avrdude: reading on-chip flash data:

    Reading | ################################################## | 100% 0.23s

    avrdude: verifying ...
    avrdude: 1044 bytes of flash verified

    avrdude: safemode: Fuses OK

    avrdude done.  Thank you.


    a program :
    Code:
    'Program realizacji programowego zegara RTC
    
    'z wykorzystaniem licznika Timer2 pracującego jako timer
    'asynchroniczny.
    'Timer2 taktowany rezonatorem kwarcowym
    'o częstotliwości 32768 Hz

    $regfile = "m8def.dat"                                      'informuje kompilator o pliku
          'dyrektyw mikrokontrolera
    $crystal = 8000000                                          'informuje kompilator




          'o częstotliwości oscylatora
          'taktującego mikrokontroler
    Config Lcd = 16 * 2                                         'konfiguracja typu wyświetlacza
          'LCD
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5       'konfiguracja linii
          'mikrokontrolera, do których
          'dołączono linie
          'wyświetlacza LCD
    Config Clock = Soft                                         'konfiguracja zegara RTC
    Config Date = Mdy , Separator = /                           'konfiguracja sposobu
          'formatowania daty
    Enable Interrupts                                           'odblokowanie przerwań
          'globalnych

    Date$ = "08/22/04"                                          'zapis daty do zmiennej
          'systemowej Date$ przechowującej
          'datę
    Time$ = "23:30:00"                                          'zapis czasu do zmiennej
          'systemowej Time$ przechowującej
          'czas

    Do                                                          'początek nieskończonej pętli
     Cls                                                        'czyszczenie LCD
     Lcd Time$                                                  'wyświetlenie na LCD w pierwszej
          'linii aktualnego czasu
     Lowerline                                                  'przejście kursora do drugiej
          'linii
     Lcd Date$                                                  'wyświetlenie w drugiej linii
          'LCD aktualnej daty
     Waitms 100                                                 'opóźnienie 100 ms
    Loop
    End                                                         'koniec programu

    Natomiast jeśli chodzi o odpinanie kabelka z RESET, no cóż tego jeszcze nie próbowałem. Najwygodniej byłoby coś odlutować przy programatorze ale on jest "świerzutki" na jeszcze prawie 12 miesięcznej gwarancji więc ewentualnie coś spróbuję z odpinaniem taśmy.
    Program działa, avrdude zapisuje ale jednak to ciągłe wyłączanie komputera aby sprawdzić czy program działa jest delikatnie mówiąc upierdliwe :(
    Może jeszcze jakaś podpowiedź ?

    0
  • #4 11 Maj 2008 21:15
    piotr_go
    Poziom 28  

    Procek nie jest czasem wyjmowany?
    Jeśli tak to odegnij delikatnie pin resetu i sprawdź.
    Dlaczego zaraz wyłączanie kompa, wystarczy programator wypiąć.
    Jaka dystrybucja linuksa ? (ja używam aktualne kubuntu)

    0
  • #5 11 Maj 2008 21:30
    ostrytomasz
    Poziom 23  

    Po zakończeniu programowania avrdude domyślnie ustawia linię resetu w stan w jakim ją zastał. Można wymusić pożądany stan używając parametru -e reset lub -e noreset. Nie liczyłbym też na to, że stan linii resetu będzie stabilny przy włączaniu komputera (może to zależy od trybu pracy portu ustawionego w biosie, u mnie różni się między komputerami).

    0
  • #6 11 Maj 2008 21:59
    jang1200
    Poziom 9  

    piotr_go napisał:
    Procek nie jest czasem wyjmowany?
    Jeśli tak to odegnij delikatnie pin resetu i sprawdź.

    wyjmowalny - efekt taki sam jak poprzednio :(
    piotr_go napisał:
    Dlaczego zaraz wyłączanie kompa, wystarczy programator wypiąć.
    nie lubię się znęcać nad portem LPT
    piotr_go napisał:
    Jaka dystrybucja linuksa ? (ja używam aktualne kubuntu)
    prawie to samo DEBIAN z KDE.

    ostrytomasz mam nadzieję, że dobrze Cię zrozumiałem
    Code:
    avrdude -E noreset -c stk200 -p m8 -U flash:w:LISTING8.19.HEX
    nic niestety nie dało.

    0
  • #7 11 Maj 2008 23:48
    piotr_go
    Poziom 28  

    LPT nie musisz odpinać, wystarczy kabelek ze startera.
    A tą zworkę resetową na starterze masz zapiętą (oczywiście nie odginając przy tym pina resetu)?
    Możesz jeszcze spróbować ten odgięty pin podpiąć do + zasilania.

    0
  • #8 12 Maj 2008 00:28
    LashloE
    Poziom 13  

    Spróbuj może programu ponyprog2000, jest on dostępny też na platformę GNU/Linux. Mi osobiście program ten nigdy nie stwarzał problemów.

    0
  • #9 12 Maj 2008 21:09
    jang1200
    Poziom 9  

    piotr_go próbowałem wszystkiego o czym piszesz i dalej nic się nie zmieniło. Zacząłem wiec wyjmować po kolei przewody z kabelka programatora no i okazało się, że po wypięciu przewodu z pinu "1" ISP (MOSI) program zaczął normalnie działać.
    Z pinu PB3 korzystał program

    Code:
    Config Pinb.3 = Input
    
    S3 Alias Pinb.3
    Set Portb.3
    (dorobiłem do tego programu który przedstawiłem powyżej obsługę przycisków)
    Wywaliłem najpierw kabelek z pinu PB3 ale to oczywiście nic nie dało, skompilowałem program już bez Pinb.3 no i teraz działa :) :(
    Czy to znaczy, że pod linuksem aby program działał z podpiętym programatorem nie można kożystać z PB3(MOSI/OC2) ?
    Dziwne ale prawdziwe, a może poprostu coś źle zrobiłem (program) ?

    0
  • #10 13 Maj 2008 13:38
    piotr_go
    Poziom 28  

    hehehe, no to teraz wiemy że wykorzystałeś i te piny w projekcie :)
    żeby odłączyć softwarowo programator od układu trzeba ustawić piny 4 i 5 portu LPT w stan wysoki, niestety nie wiem jak sie to robi w avrdude, jak wrócę do domu to postaram sie poszukać czegoś na ten temat

    0
  • #11 15 Maj 2008 00:22
    jang1200
    Poziom 9  

    Przeglądałem PDF który instaluje się w systemie razem z avrdude ale znalazłem tylko

    Code:
    -E reset/noreset   -E vcc/novcc
    więc coś mi się wydaje (mogę się oczywiście mylić), że innych pinów chyba odłączyć się nie da przy pomocy avrdude :(

    0
  • #12 15 Maj 2008 11:12
    piotr_go
    Poziom 28  

    z tego co widzę to chyba nie może być i noreset bo "programming hardware remains connected"

    a wiesz co, daj opcje "-E novcc" a w pliku avrdude.conf zmień:

    Code:
    programmer
    
      id    = "stk200";
      desc  = "STK200";
      type  = par;
      buff  = 4, 5;


    na:
    Code:
    programmer
    
      id    = "stk200";
      desc  = "STK200";
      type  = par;
      vcc  = ~4, ~5;



    a jak nie pomoże to na:
    Code:
    programmer
    
      id    = "stk200";
      desc  = "STK200";
      type  = par;
      buff  = 4;
      vcc = ~5;

    i użyj "-E noreset,novcc"

    0
  • #13 15 Maj 2008 22:04
    jang1200
    Poziom 9  

    piotr_go dzięki, że jeszcze chce Ci się myśleć nad tym.
    Odstawiłem całą masę przeróżnych kombinacji, oprócz tych które byłeś uprzejmy podrzucić ale niestety dalej nic.
    Ten numer z tyldą przed numerkiem (4, 5) wogóle nie przechodzi - syntax error.
    Wczoraj kupiłem sobie drukarkę laserową a, że gościu zapomniał wrzucić do paczki kabelek USB więc muszę tak sobie co chwilę przekładać kabelki :( i za każdym razem robiłem tak : wylączałem komputer, z płytki testowej wyjmowałem kabelek od zasilacza a następnie gniazdo ISP i ... no właśnie przed chwilą odbyło się to trochę inaczej, wyjąłem programator z komputera ale nie wyjąłem gniazda z płytki ... i okazuje się, że efekt taki sam jak przy uruchomionym linuksie ???
    Czy to nie jest przypadkiem wina programatora ?
    w tej chwili jeszcze jedna próba - programator leży na biurku, nie podpięty do kompa, wkładam gniazdko do płytki i ... reset programu (pokazuje 23:30) i ani myśli dalej działać, wyjąłem gniazdo i działa ?!?!?
    Kabelki połączeniowe mam dwa i na każdym to samo. Podpięcie samego kabelka, bez programatora, niczego nie psuje.
    Mam to cudo - http://www.mikrosterowniki.pl/avr_prog_I.html

    0
  • #14 15 Maj 2008 23:05
    piotr_go
    Poziom 28  

    Cytat:
    Czy to nie jest przypadkiem wina programatora ?

    nie

    Avrdude po prostu zostawia piny 4 i 5 LPT w stanie niskim przy wyjściu i z tąd te problemy.
    Dopóki ktoś czegoś nie wymyśli proponuje wypinać kabelek ze startera po programowaniu i tyle. Możesz też nie używać pinów mosi i sck (pb3 i pb5) w programie.

    0
  • #15 10 Sie 2008 19:50
    cynowy_ludzik
    Poziom 10  

    mam problem chłopaki avrdude łąd mi wywala

    java.io.IOException: /usr/local/bin/avrdude :not found

    0
  • #16 16 Sie 2008 10:36
    piotr_go
    Poziom 28  

    Sorry że tak późno ale ostatnio mnie nie było.
    Jakiegoś gui używasz jak sie domyślam, jakiego?
    Gdzieś w konfiguracji masz źle ścieżkę wpisaną do avrdude, u mnie to "/usr/bin/avrdude".

    0