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

[Atmega32][C] - Kod programu do wytrawiarki

Roger94 08 Kwi 2014 20:44 2988 38
  • #1 08 Kwi 2014 20:44
    Roger94
    Poziom 7  

    Ostatnio wraz z kumplami z klasy zaczęliśmy tworzyć wytrawiarkę PCB jak ta w stylu Wytrawiarka by mastermaniek V2.0 z tym że postanowiliśmy dodać windę do płytki która by opuszczała płytkę do wytrawiacza i wyjmowała ją z powrotem. Był plan zastosowania l289 do sterowania silnika liniowego który pozwalałby realizować działanie windy. Niestety silnik pobierał 4A przy 12V z powodu czego musieliśmy zrezygnować z tego układu i zastąpić go tym co było pod ręką, czyli przekaźników. I tu przechodzę do sedna. Mam część kodu który pracował pod inną wytrawiarką na Atmega8 i działał. Sam próbowałem pozmieniać porty aby pasowały do tych w naszym schemacie ale nie mam pewności co do działania kodu gdyż sprzęt fizycznie znajduje się u kumpla. Mam również część kodu który odpowiadałby za sterowanie silnika i odczytywanie pozycji windy ale nie potrafię samodzielnie scalić tych kodów dlatego proszę o pomoc przy scaleniu kodu i sprawdzeniu pierwszej części kodu. Poniżej zamieszczam schemat wykonany w Eagel i obie części kodu.

    Główna część programu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Sterowanie silnikiem:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 29
  • Relpol
  • #2 11 Kwi 2014 14:16
    Roger94
    Poziom 7  

    Udało mi się połączyć kod, i dopasować preskalery do Atmegi ale podczas kompilacji napotykam błędy których kompilator nie może dokładnie określić prosiłbym o sprawdzenie całości i ewentualne poprawki

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #3 11 Kwi 2014 14:31
    mi14chal
    Poziom 28  

    A jakie to są te błędy?

    0
  • Relpol
  • #4 11 Kwi 2014 17:48
    Roger94
    Poziom 7  

    Kompilator nie umie określić linii z błędem, co ciekawe działo się tak w AVR Studio a po kompilacji w Eclipse stworzyło plik .hex bez większych problemów. Teraz czekam na układ aby wgrać wsad żeby sprawdzić czy jest sprawne i podzielę się wynikiem

    Dodano po 2 [godziny] 25 [minuty]:

    Eclipse przekompilował program, wgrałem go do Atmegi i nic. Układ nie kontaktuje się z prockiem.

    Oto logi:

    E:\AVR\Wytrawiarka\default/../main.c:69: undefined reference to `LCD_Initalize'
    E:\AVR\Wytrawiarka\default/../main.c:72: undefined reference to `LCD_WriteText'
    E:\AVR\Wytrawiarka\default/../main.c:73: undefined reference to `LCD_GoTo'
    E:\AVR\Wytrawiarka\default/../main.c:74: undefined reference to `LCD_WriteText'
    E:\AVR\Wytrawiarka\default/../main.c:76: undefined reference to `LCD_Clear'
    collect2: ld returned 1 exit status
    make: *** [Wytrawiarka.elf] Błąd 1
    Build failed with 5 errors and 1 warnings...

    Wiem że dotyczą one definicji wyświetlacza ale nie rozumiem dlaczego to nie chce współgrać jeśli zamieściłem pliki nagłówkowe z definicjami


    Z tym że gdy dodam } na końcu kodu pojawia się jeden warning którego kompilator nie potrafi zlokalizować

    c:\program files\atmel\avr tools\avr toolchain\bin\../lib/gcc/avr/4.5.1/../../../../avr/include/util/delay.h:89:3: warning: #warning "F_CPU not defined for <util/delay.h>"
    ../main.c:369:1: error: expected identifier or '(' before '}' token
    make: *** [main.o] Błąd 1
    Build failed with 1 errors and 1 warnings...
    .

    0
  • #5 11 Kwi 2014 20:05
    mi14chal
    Poziom 28  

    Po pierwsze daj log z kompilacji. Po drugie co znaczy że układ nie kontaktuje się z prockiem?

    0
  • #6 11 Kwi 2014 20:31
    Roger94
    Poziom 7  

    mi14chal napisał:
    Po pierwsze daj log z kompilacji. Po drugie co znaczy że układ nie kontaktuje się z prockiem?


    Niby wgrał się wsad na Atmege ale wytrawiarka nie reaguje tak jakby wsad był pusty albo nie wgrał się poprawnie

    0
  • #7 11 Kwi 2014 21:55
    mi14chal
    Poziom 28  

    Jak widzę logi z kompilatora to ja nie wiem co Ty wgrałeś jak kompilacja się nie udała. Po drugie skoro używasz Eclipse to weź sformatuj ten kod bo wygląda okropnie.

    0
  • #8 11 Kwi 2014 22:46
    barti879
    Poziom 18  

    Szkoda, że jeśli rozpowszechniasz moje kody to przynajmniej nie wspomnisz o ich autorze.. Dla niewtajemniczonych program z pierwszego postu to lekko przerobiona pierwsza wersja mojego kodu do wytrawiarki ;P https://www.elektroda.pl/rtvforum/viewtopic.php?t=2766382&highlight=

    Co do błędów kompilacji to jeśli otrzymałeś takie komunikaty to nie możliwe jest, że wgrałeś coś do procka.

    0
  • #10 12 Kwi 2014 07:33
    barti879
    Poziom 18  

    dondu napisał:
    Nie definiuj F_CPU w kodzie programu z tych powodów: http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html
    a nie będziesz miał takich warningów:
    Roger94 napisał:
    warning: #warning "F_CPU not defined for <util/delay.h>"

    a program w tym zakresie zrewanżuje się poprawnym działaniem


    Komunikat ten wskazuje właśnie na to, że F_CPU nie zostało zdefiniowane przez co biblioteka <util/delay> nie może działać prawidłowo. Jeśli działasz na Atmel Studio zrób tak jak tutaj http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html,, a jeśli na zwykłym Programers Nortepadzie to na początku programu zdefiniuj częstotliwość tak jak w kodzie, który skopiowałeś z mojego wątku, czyli wstaw linię F_CPU 1000000UL.

    0
  • #11 12 Kwi 2014 10:33
    mi14chal
    Poziom 28  

    Ale u kolegi oprócz F_CPU jest error:

    Cytat:
    ../main.c:369:1: error: expected identifier or '(' before '}' token
    make: *** [main.o] Błąd 1
    Build failed with 1 errors and 1 warnings...

    Który trza również poprawić.

    0
  • #12 12 Kwi 2014 11:27
    Roger94
    Poziom 7  

    Korzystam AVR Studio 4 bo nowsze nie dają możliwości korzystania z programatorów klonów (nie mam programatora Atmela tylko klon firmy Gotronik)

    0
  • #14 12 Kwi 2014 12:10
    Roger94
    Poziom 7  

    Tylko nie wiem w którym miejscu, żeby nie to już bym sobie poradził, zdefiniowanie częstotliwości wcale nie jest teraz największym problemem. Co dziwne kompilator domaga się definicji obsługi wyświetlacza które znajdują się w oddzielnym pliku nagłówkowym który zamieściłem

    Dodano po 12 [minuty]:

    Problem kompilacji rozwiązany. Dodałem linijki

    Kod: c
    Zaloguj się, aby zobaczyć kod


    i kompilacja przeszła sprawnie. Jednak nadal po wgraniu programu nie działa on. Myślę że to wina źle podciągniętych programowo wejść. Czy byłby w stanie ktoś mi z tym pomóc?

    0
  • #15 12 Kwi 2014 12:25
    mi14chal
    Poziom 28  

    Includowanie plików źródłowych? To jest bardzo dziwne. A co do FCPU to jest wyraźnie napisane na stronie:

    Cytat:
    wybierając w AVR Studio 4 opcje Project/Configuration Options – w zakładce General wpisujemy w polu Frequency wybraną częstotliwość taktowania procesora

    Nawet masz tam obrazki...

    0
  • #16 12 Kwi 2014 12:30
    Roger94
    Poziom 7  

    Już załatwiłem sprawę taktowania. Nie ma z tym problemu, problem nadal sprawiają mi pull up'y.

    0
  • #17 13 Kwi 2014 09:35
    dondu
    Moderator Mikrokontrolery Projektowanie

    Inkludujemy tylko pliki nagłówkowe ".h", a nie pliki źródłowe ".c" - zapamiętaj i nigdy więcej nie inkluduj plików źródłowych. Oprócz tego pliki źródłowe i nagłówkowe należy dodać do drzewa projektu. Zrób więc poprawnie.

    Roger94 napisał:
    ... problem nadal sprawiają mi pull up'y.

    Skąd takie przypuszczenia i o które Ci chodzi?

    0
  • #18 13 Kwi 2014 14:58
    Roger94
    Poziom 7  

    Czytałem że warto podciągnąć wszystkie wolne piny i wejścia do vcc, a w moim przypadku jedynymi wyjściami są piny PA1, PA0, PB1, PB2 wszystkie piny Potru D więc reszte należałoby podciągnąć

    Dodano po 4 [minuty]:

    Mam jeszcze problem ze znalezieniem właściwej biblioteki bo po analizie schematu połapałem się że kumpel podłączył wyświetlacz w tryb odczytu flagi zajętości, a pobierając bibliotekę stąd po otwarciu zipa znajduję bibliotekę bez obsługi flagi zajętości. Mógłby ktoś umieścić jeżeli ma właściwą bibliotekę?

    0
  • #19 13 Kwi 2014 16:48
    barti879
    Poziom 18  

    Wydaje mi się, że to nie Twój kumpel użył tej biblioteki tylko ja... Przecież program skopiowany jest z mojego wątku ;P
    Po pobraniu plików ze strony otwierasz sobie plik HD44780.h i tam zmieniasz porty do których podłączasz swój LCD (jest tam m.in. pin RS odpowiedzialny właśnie za flagę zajętości)

    0
  • #20 13 Kwi 2014 17:53
    mi14chal
    Poziom 28  

    barti879 napisał:
    (jest tam m.in. pin RS odpowiedzialny właśnie za flagę zajętości)


    Nie RS a RW. Po za tym nie ma sensu używania RW w przypadku tego lcd. Najlepiej wystaw na ten pin stan niski, albo podłącz go do masy o ile możesz.

    0
  • #21 13 Kwi 2014 18:12
    Roger94
    Poziom 7  

    Załatwiłem sprawę sprawdzania flagi zajętości po przez przylutowanie RW do masy, jednak coś dalej powoduje że wyświetlacz nie może się zainicjować i wszystko stoi w miejscu.

    0
  • #22 13 Kwi 2014 18:34
    mi14chal
    Poziom 28  

    To znaczy co się dzieje z wyświetlaczem?

    0
  • #23 13 Kwi 2014 18:36
    Roger94
    Poziom 7  

    Widać jedynie te prostokąty które pojawiają się podczas zasilenia go. Tak jakby nie dostawał żadnych sygnałów zewnętrznych.

    0
  • #24 13 Kwi 2014 19:25
    mi14chal
    Poziom 28  

    Pokaż najlepiej cały program, pliki nagłówkowe i schemat.

    0
  • #25 13 Kwi 2014 21:18
    Roger94
    Poziom 7  

    Wedle życzenia wstawiam wszystko jak leci

    Program główny

    Kod: c
    Zaloguj się, aby zobaczyć kod



    plik nagłówkowy
    HD44780.h

    Kod: c
    Zaloguj się, aby zobaczyć kod


    plik HD44780.c

    Kod: c
    Zaloguj się, aby zobaczyć kod


    i schemat z eagla w załączniku

    0
  • #26 13 Kwi 2014 21:20
    dondu
    Moderator Mikrokontrolery Projektowanie

    Ile razy trzeba Ci pisać, że nie inkludujemy plików .c?
    Po co mamy tracić czas skoro nie korzystasz z naszych porad?

    0
  • #27 13 Kwi 2014 21:21
    Roger94
    Poziom 7  

    Inaczej AVR Studio nie chciał kompilować

    0
  • #28 13 Kwi 2014 21:23
    dondu
    Moderator Mikrokontrolery Projektowanie

    Roger94 napisał:
    Inaczej AVR Studio nie chciał kompilować

    Bo nie wykonujesz tego co piszemy:

    dondu napisał:
    Inkludujemy tylko pliki nagłówkowe ".h", a nie pliki źródłowe ".c" - zapamiętaj i nigdy więcej nie inkluduj plików źródłowych. Oprócz tego pliki źródłowe i nagłówkowe należy dodać do drzewa projektu. Zrób więc poprawnie.

    0
  • #29 13 Kwi 2014 21:29
    Roger94
    Poziom 7  

    Właśnie tak robiłem, dopiero po zainkludowaniu udało się przekompilować całość.

    0