ATNEL tech-forum
https://forum.atnel.pl/

Problem z Atmega64
https://forum.atnel.pl/topic19694.html
Strona 1 z 2

Autor:  slawus1998 [ 27 lis 2017, o 13:36 ]
Tytuł:  Problem z Atmega64

Witam
Podczas pracy nad nowym sterownikiem pojawił się dziwny problem, którego nie za bardzo umiem rozwiązać. Po raz pierwszy do sterownika włożyłem duży mikrokontroler, jakim jest Atmega64 (nie miałem wcześniej styczności z tym procesorem, dotychczas pracowałem na procesorach attiny, atmega 8, 16,32. Poniżej wrzucam schemat tego sterownika:
Obrazek

Obrazek

To co widać na pierwszy rzut oka to żle podłączone linie MOSI i MISO. Podłączając programator dolutowałem kabelki do PE0 i PE1, resztę podłączam przez złącze ISP. Proces wykrywania procesora i programowania przebiega bez zarzutu. Problem pojawia się podczas wgrywania programu do sterownika. Program wstępnie przygotowałem i rozlokowałem w kilku plikach. Początek funkcji main wygląda tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


W dalszej części funkcji jest pętla while(1), w której znajduje się obsługa przycisków panelu itp. Użyte trzy funkcje to:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Po pierwszym wgraniu wsadu do procka nie było żadnej reakcji. W internecie doszukałem się iż mogą być to problemy z trybem zgodności. Ustawiłem zatem fusebity w MkAVRCalculatorze:
Obrazek
Wyłączyłem interfejs JTAG, przestawiłem taktowanie procesora na wewnętrzny oscylator 8MHz oraz wyłączyłem Comp mode. Efekt jest taki, że po podłączeniu zasilania program w kółko wykonuje funkcję animacja. Przeniesienie tej funkcji i wpisanie jej kody do maina nie zmienia stanu rzeczy. Zaś po usunięciu połowy animacji program wykonuje ją tylko raz, a potem na przemian jedna po drugiej zapala diody na panelu sterownika. To jest jednak dalsza część. Moje pytanie brzmi - czy orientuje się ktoś może z czego wynika ten problem, że program się jakby resetuje po powrocie do funkcji main? Czy to kwestia niewłaściwego podłączenia którychś peryferiów mikrokontrolera, czy jakieś fluktuacje z pinem PEN.
Będę wdzięczny za każdą pomoc.
Pozdrawiam

Autor:  adamBo [ 27 lis 2017, o 13:54 ]
Tytuł:  Re: Problem z Atmega64

Witam. Po pierwsze b.ładnie kolega przygotował projekcik. Po drugie, ponieważ nie widzimy całości kodu mam takie pytanie, jak się ma zajętość pamięci w mikrokontrolerze?? , czy czasami kodzik sam siebie nie "zjada" :)
Pozdrawiam

Wysłane z mojego HTC One_M8 przy użyciu Tapatalka

Autor:  slawus1998 [ 27 lis 2017, o 14:15 ]
Tytuł:  Re: Problem z Atmega64

Jeśli chodzi o zajętość pamięci, to program dopiero jest na początku przygotowania, toteż zajmuje raptem 1% pamięci flash (848B). Pozostałe pamięci również są prawie że nietknięte

Autor:  mirekk36 [ 27 lis 2017, o 14:17 ]
Tytuł:  Re: Problem z Atmega64

pokaż lepiej swój plik main.c a nie tylko fragment bo tam pewnie masz babola - tak czuję, ale mogę się mylić

Autor:  slawus1998 [ 27 lis 2017, o 14:33 ]
Tytuł:  Re: Problem z Atmega64

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tak wygląda obecnie main. Wiele w nim nie ma, bo tak jak pisałem - program dopiero powstaje. Idea jest taka, że jeśli kliknę guzik na panelu, ustawia się zmienna predkosc na odpowiednią wartość. Jeśli przytrzymam guzik STU lub STD to w trakcie przytrzymania odpowiednie przekaźniki przewodzą. Dodatkowo jest tak użyta zmienna czyk mająca na celu redukcje zapobiegnięcie sytuacji gdy trzymam wciśnięty przycisk, lekko ruszę palec na krótką chwilę i przekaźnik się rozłącza i znowu załącza. Funkcja klawisz wciśnięty:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Do obsługi klawiszy używam multipleksera, stąd przed sprawdzenie stanu klawisza ustawienie odpowiednich linii adresowych PORT A a potem ich wyzerowanie

EDIT: Wstawiam cały plik projektu. W pozostałych plikach programu znajdują się głównie definicje, bo funkcji jeszcze za wiele nie napisałem, ale może przyda się to do zlokalizowania problemu

Autor:  adamBo [ 27 lis 2017, o 17:53 ]
Tytuł:  Re: Problem z Atmega64

A ten return na końcu pętli do czego służy???

Wysłane z mojego HTC One_M8 przy użyciu Tapatalka

Autor:  slawus1998 [ 27 lis 2017, o 21:59 ]
Tytuł:  Re: Problem z Atmega64

Wskazany return nie był w whilu, tylko w mainie. Po jego usunięciu problem pozostał. Wziąłem się za analizowanie krok po kroku programu i funkcji animacja. Ograniczyłem maina do minimum:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Po kolei wprowadzałem do niego kolejne funkcje. Analizując funkcję animacja doszedłem do stanu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Odkomentowanie linijki Z4_ON; powoduje że po uprzednim zgaszeniu Z3 przestaje się dziać cokolwiek. Odkomentowanie Z4_ON, delaya i Z4_OFF sprawia, że program po zgaszeniu Z4 resetuje się. Po wpisaniu Z2 w miejsce Z4 program działa poprawnie. Wychodzi na to że coś jest nie tak z Z4. Analizując definicje Z4, nie różnią się one od wcześniejszych za wyjątkiem ustawienia stanu wysokiego na inne linie sygnałowe (diody obsługuje demultiplekser)

Autor:  Marhef [ 27 lis 2017, o 22:01 ]
Tytuł:  Re: Problem z Atmega64

A pokaż te makra (w sensie Z1_ON, itd.)

Autor:  slawus1998 [ 27 lis 2017, o 22:03 ]
Tytuł:  Re: Problem z Atmega64

Makra obsługi diod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Gdy w mainie w pętli while migającej diodą wpisałem Z4 zamiast Z1, to Z4 się zapala i w momencie linijki Z4_OFF program się resetuje

Zrobiłem małą modyfikację maina:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Miganie diodą Z1 diada bezbłędnie. Makro LEDS_OFF zeruje wszystki piny adresowe demultipleksera, czyli również gasi diodę Z1. Jeśli zamiast Z1 wpiszę Z4, to dioda się zapala, a po sekundzie następuje reset programu

Edit: Dalsza analiza problemu doprowadziła mnie wniosku, że program resetuje się użyta zostaje linia: #define ZIELONA4 (LEDA | LEDB) . Jeśli w tej lini dokonam podmianę i zamiast linii A i B uruchomię np linie A i C lub A i D, to pozostałe makra działają poprawnie - co prawda na panelu miga inna dioda, ale jednak miga. Zatem makra Z4_ON i Z4_OFF działają poprawnie. Sprawdzę wnikliwie połączenia pomiędzy panelem a głównym sterownikiem, ponieważ może elektroniczna część sterownika nawala

Autor:  adamBo [ 27 lis 2017, o 23:00 ]
Tytuł:  Re: Problem z Atmega64

Dokładnie, jak mówisz sprawdź PC2 czy nie przywiera

Wysłane z mojego HTC One_M8 przy użyciu Tapatalka

Autor:  slawus1998 [ 27 lis 2017, o 23:09 ]
Tytuł:  Re: Problem z Atmega64

Przeprowadziłem kolejną modyfikacją maina. Efekt jest taki, że gyd program jest napisany tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to wszystko pięknie działa, dioda Z4 ładnie miga (linia A i B demultipleksera odpowiada za diodę Z4). Za to gdy program napiszę w takiej postaci:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to w momencie warunku wygaszającego diodę sterownik się resetuje. A więc można problem ominąć gasząc najpierw LEDA, potem LEDB, tylko czy to jest poprawne rozwiązanie problemu?

Autor:  Marhef [ 27 lis 2017, o 23:19 ]
Tytuł:  Re: Problem z Atmega64

A dla diody Z1 działa poprawnie? Tam też masz dwie linie zerowane jednocześnie.

Autor:  slawus1998 [ 27 lis 2017, o 23:35 ]
Tytuł:  Re: Problem z Atmega64

Przeprowadziłem ostatnią poprawkę. Zmieniłem taśmę łączącą sterownik z panelem. Wszystko zaczęło działaś poprawnie. Dotychczas używałem taśm o długości 1.2 metra, przy czym stosowałem mikrokontroler ATMega 32 w obudowie DIL40. Przy obecnym sterowniku taśma ma 1.5 metra, procesor jest w wersji SMD. Czy opisany w temacie problem może być spowodowany mniejszą wydajnością prądową mikrokontrolera?

Autor:  mirekk36 [ 28 lis 2017, o 01:32 ]
Tytuł:  Re: Problem z Atmega64

slawus1998 napisał(a):
Dotychczas używałem taśm o długości 1.2 metra, przy czym stosowałem mikrokontroler ATMega 32 w obudowie DIL40. Przy obecnym sterowniku taśma ma 1.5 metra,

taśma ? jaka taśma - do czego ta taśma i co ona łączy ... ? albo jakie sygnały nią płyną czy tylko zasilanie?

Autor:  slawus1998 [ 28 lis 2017, o 11:35 ]
Tytuł:  Re: Problem z Atmega64

Sterowniki które składam są dwuczęściowe. Mianowicie jest jedna płytka sterownika (pokazana w pierwszym poście) która znajduje się na dole maszyny, wchodzi w interakcję z czujnikami, falownikiem itp , oraz panel znajdujący się wyżej na którym są diody i przyciski do kontroli maszyny. (Próba połączenia tych dwóch płytek w jedną nie była zbyt dobra i skuteczna). Do połączenia sterownika z panelem używam taśmy. Jest to taśma podobna do tej z programatora Atnel USB-ASP, tylko nieco szersza i dłuższa. Sygnały które w niej obecnie są przesyłane to adres wysyłany do demultipleksera do obsługi diod, adres wysyłany do multipleksera (do obsługi przycisków) oraz "powrót" z multipleksera. Plus dodatkowo zasilanie, żeby diody i układy scalone miały jak działać. Przyznam szczerze że jest to moje pierwsze wykorzystanie układów mux i demux, ale chciałem ograniczyć trochę ilość pinów mikrokontrolera potrzebną do obsługi panelu

Autor:  mirekk36 [ 28 lis 2017, o 13:11 ]
Tytuł:  Re: Problem z Atmega64

te taśmy są podłączone bezpośrednio do pinów mikrokontrolera ?

Autor:  slawus1998 [ 28 lis 2017, o 15:26 ]
Tytuł:  Re: Problem z Atmega64

Tak. I podejrzewam że to było zawodne...
Postaram się przerobić nieco układ żeby były tam jakieś tranzystorki, żeby sygnał nie leciały bezpośrednio z mikrokontrolera

Autor:  Marhef [ 28 lis 2017, o 16:37 ]
Tytuł:  Re: Problem z Atmega64

A sprawdzałeś, jaki masz spadek napięcia na takiej długości? Ja na Twoim miejscu spróbowałbym dodać procek na panel (jakiś malutki, tylko do obsługi przycisków/diod/wyświetlacza/cokolwiek przyjdzie Ci do głowy) i łączył panel ze sterownikiem za pomocą tasiemki 4-żyłowej wykorzystując UART - chyba nie jest to za duża odległość?, lub na przykład RS-485. A zasilanie ciągnąć wyższe i dać stabilizator/przetwornicę dopiero na PCB panelu.

Autor:  mirekk36 [ 28 lis 2017, o 16:56 ]
Tytuł:  Re: Problem z Atmega64

slawus1998 napisał(a):
Postaram się przerobić nieco układ żeby były tam jakieś tranzystorki, żeby sygnał nie leciały bezpośrednio z mikrokontrolera


takie taśmy sygnałowe to po prostu MEGA MASAKRA - temat niejednokrotnie poruszany na forum ale rzadko kto używa aż TAK długich taśm jak ty - więc KOMPLETNIE nie masz się czemu dziwić

zaś rozwiązania z jakimiś tranzystorkami niewiele ci pomogą - stracisz znowu czas i pieniądze na takie rozwiązania .... tu chodzi o to, że tworzysz sobie mega ANTENKI zbierające zakłócenia z zewnątrz do procka jak sucha gąbka wodę. A TYM BARDZIEJ jak się słyszy, że ty działasz przy takich źródłach przemysłowych zakłóceń jak falowniki .... Więc tego typu rozwiązania to istne samo-proszenie się o problemy, przy czym nawet jak ci zadziała - to żebyś się nie zdziwił że za miesiąc nagle przestanie działać, potem znowu może ruszy itp itd

Poczytaj takie wątki na forum ....

do tego celu są albo :

1. magistrala typu np RS485, CAN itp

2. albo porządna optoizolacja i przekazywanie sygnałów za pomocą wyższego napięcia np 12V

3. pętla prądowa dla każdej z końcówek

ale ZDECYDOWANIE najlepiej przemyśleć RS485 i po drugiej stronie procek który na krótkich łączach będzie już miał podłączone przyciski czy krańcówki i będzie gadał sobie po RS485 z głównym prockiem ....

jeśli wydaje ci się to za długie i za drogie albo za trudne - to zobaczysz, że jak pójdziesz w setki tranzystorków i galwaniczne połączenia - to jak później podsumujesz stracone pieniądze, czas i nerwy to wtedy okaże się, że od początku warto było w garść RS485

------------------------ [ Dodano po: 1 minucie ]

Marhef napisał(a):
i łączył panel ze sterownikiem za pomocą tasiemki 4-żyłowej wykorzystując UART

przy falownikach ? .... polecałbym RS485 który zapewnia transmisję różnicową a więc po stokroć odporniejszą za zewn zakłócenia - toż nie na darmo stosuje się go jako standard przemysłowy

Autor:  Marhef [ 28 lis 2017, o 16:59 ]
Tytuł:  Re: Problem z Atmega64

No tak... nie doczytałem o falownikach... zostaje RS485 ;)

Autor:  slawus1998 [ 28 lis 2017, o 17:08 ]
Tytuł:  Re: Problem z Atmega64

Dziękuję serdecznie za wszystkie wskazówki. Przyznam szczerze że pomysł z RSem nie przyszedł mi do głowy, bo na drodze nauki programowania jeszcze do niego nie doszedłem. Ale to nic, zorganizuje sobie kurs przyspieszony, bluebook i Internet na pewno pomogą ;)
Przy pomyśle z tranzystorami nie będę się upierał. Pomysł ten przyszedł mi do głowy bo było to względne najlepsze rozwiązanie jakie znam. Jak widać - znam mało...
Ktoś może stwierdzi że czemu się biorę za takie sterowniki skoro nie mam kompletnej wiedzy. Ale akurat taka mi wyszła sytuacja. Ucząc się na błędach i w praktyce człowiek na pewno nauczy się więcej, ale czasem trzeba zaczerpnąć porady.
Tak czy inaczej - dziękuję za sugestię, postaram się je wprowadzić a gdybym napotkał jakieś problemy to będę pytał dalej.
Pozdrawiam

Autor:  mirekk36 [ 28 lis 2017, o 17:12 ]
Tytuł:  Re: Problem z Atmega64

slawus1998 napisał(a):
Ktoś może stwierdzi że czemu się biorę za takie sterowniki skoro nie mam kompletnej wiedzy.

ale co się przejmować - KAŻDY kiedyś zaczyna albo zaczynał i to normalne ...

Ważniejsze czy się ktoś chce uczyć ;) i prawidłowo rozwiązywać problemy

slawus1998 napisał(a):
Przyznam szczerze że pomysł z RSem nie przyszedł mi do głowy, bo na drodze nauki programowania jeszcze do niego nie doszedłem.

Tak mówi większość początkujących, którzy się wkopali w takie taśmy i tarapaty - a tymczasem komunikacja RS232 to PODSTAWA PODSTAW w mikrokontrolerach i od tego się akurat zaczyna wręcz

co ważniejsze - sam zobaczysz, że to nie jest trudne ;)

A jak po drodze będziesz miał pytania to śmiało pytaj na forum - po to ono jest

Autor:  slawus1998 [ 28 lis 2017, o 17:33 ]
Tytuł:  Re: Problem z Atmega64

W kwestii RSa to widziałem w Pańskich poradniach jakie są z tego możliwości, toteż chęć nauczenia się tego jest duża. Jedynie blue book nie zaczyna się od nauki RSa, dlatego jeszcze go nie poznałem. Ale idąc krok po kroku dojdę i do niego :)

Autor:  slawus1998 [ 29 lis 2017, o 17:40 ]
Tytuł:  Re: Problem z Atmega64

Zaznajomiłem się z elektroniczną obsługą RSa, poczytałem o programistycznej obsłudze, nawet zahaczyłem o obsługę soft Uarta - na pewno zastosuję to w swoim układzie. Mimo wszystko nie dawało mi spokoju to, że zwykła taśma może aż tak wpłynąć na działanie sterownika, tym bardziej że jest to w warunkach domowych, przy stabilnym zasilaniu. Poszperałem jeszcze troszkę i okazało się że bezpośrednim źródłem problemu było niepodciągnięcie linii sygnałowych rezystorem do masy... Po zastosowaniu rezystorów (bodajże 4.7K) wszystko zaczęło działać, pomimo użycia taśmy. Mimo to dokonam zmiany tej transmisji na RS-485, bo tak jak Pan Mirek wspomniał - taśma to wielki zbieracz zakłóceń. I o ile w domu w warunkach laboratoryjnych wszystko działa, a tyle w gotowej maszynie mogą się pojawiać dziwne zachowania.
Tak czy inaczej - dziękuję za wszelką otrzymaną pomoc. W razie problemów będę pytał ;)

Autor:  mirekk36 [ 29 lis 2017, o 19:12 ]
Tytuł:  Re: Problem z Atmega64

slawus1998 napisał(a):
I o ile w domu w warunkach laboratoryjnych wszystko działa, a tyle w gotowej maszynie mogą się pojawiać dziwne zachowania.

ale O TO WŁAŚNIE chodzi ;)

------------------------ [ Dodano po: kilkunastu sekundach ]

slawus1998 napisał(a):
bo tak jak Pan Mirek wspomniał - taśma to wielki zbieracz zakłóceń.

To nie ja - ja tylko powtarzam to co mówią mądrzejsi ode mnie ale też na bazie swoich doświadczeń gdy byłem początkujący i robiłem podobne próby ;)

Autor:  rskup [ 30 lis 2017, o 17:40 ]
Tytuł:  Re: Problem z Atmega64

slawus1998 napisał(a):
I o ile w domu w warunkach laboratoryjnych wszystko działa, a tyle w gotowej maszynie mogą się pojawiać dziwne zachowania.
Jest taki prosty test odporności urządzenia na zakłócenie EMI do zrobienia w domu.
Przez urządzenie przeprowadzasz kabel zasilający 220V (jak masz u siebie taśmę łączącą to oplatasz ją z kablem zasilającym). Na końcu kabla musisz mieć podłączone jakieś urządzenie o charakterze indukcyjnym (np. coś z silnikiem) pobierające większą moc. Następnie podłączasz zasilanie urządzenia poprzez kabel 220V, ale tak by przez chwilę poiskrzyło.
Urządzenie dostaje wtedy strasznego "kopa elektromagnetycznego" jak w bardzo przemysłowych warunkach. Jak będzie Ci działać to jesteś odporny na zakłócenia :)

--
Pozdrawiam,
Robert

------------------------ [ Dodano po: 1 minucie ]

Stawiam, że wersja urządzenia z taśmą nie przejdzie tego testu :lol:

Autor:  Marhef [ 30 lis 2017, o 22:19 ]
Tytuł:  Re: Problem z Atmega64

Mam na taki test pewien sposób. Silnik od pralki plus starter do świetlówki. Podłączam silnik przez starter. Mnóstwo urządzeń nie przechodzi tego testu.

Autor:  rskup [ 30 lis 2017, o 22:52 ]
Tytuł:  Re: Problem z Atmega64

Marhef napisał(a):
Silnik od pralki plus starter do świetlówki. Podłączam silnik przez starter.
Czyli robisz dokładnie to co ja napisałem :) Tylko masz lekko zautomatyzowane włączanie zasilania na silnik.

--
Pozdrawiam,
Robert

Autor:  Marhef [ 30 lis 2017, o 23:42 ]
Tytuł:  Re: Problem z Atmega64

Tak. To jedno z rozwiązań

Autor:  slawus1998 [ 1 gru 2017, o 12:46 ]
Tytuł:  Re: Problem z Atmega64

Dziękuję za wskazówkę. Będę mógł owinąć kable sterownika o kabel łączący falownik z silnikiem. Tam powinno trochę zakłóceń chodzić, to sprawdzę ;)

Strona 1 z 2 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/