Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Dziwny problem z Attiny 2313 przy RC 8MHz

gousta 22 Sep 2010 13:32 2751 24
Tespol
  • #1
    gousta
    Level 10  
    Witam Koledzy

    Mam następujący problem. Napisałem programowy 8 kanałowy PWM do sterowania diodami realizowany w przerwaniu. Wszystko działa do czasu rozłączenia i ponownego załączenia zasilania. uC się wysypuje i zdaje się wystawiać na wyjścia losowe stany. W przypadku połączonego programatora (druty z rezystorami pod LPT) sytuacja występuje po każdorazowym zaniku zasilania, przy braku programatora średnio 1 na 10 razy.

    Teraz najciekawsze: wszystko to występuje tylko wtedy gdy wyłączę dzielenie częstotliwości taktowania oscylatora przez 8 ( co daje częstotliwość równą 8 Mhz na wewnętrznym oscylatorze RC,wszystkie inne ustawienia fusów domyśle), w przypadku taktowania z prędkoscia 1 Mhz nic się nie wysypuje, ani w tym, ani w innych programach.

    Co może być przyczyną takiego stanu rzeczy? Czy wyłączając dzielenie przez 8 należy podjąć jeszcze jakieś dodatkowe działania? Oczywiście w kompilatorze częstotliwość została zmieniona w kompilatorze ale to chyba i tak bez znaczenia przy braku korzystania z delay. Dodatkowo reset został podciągnięty do Vcc przez R47k. Zakłócenia też raczej nie wchodzą w grę bo obciążenie to 8 diod, dodatkowo puszczone przez ULN208.


    Dodatkowo załączam kod programu, być może tu tkwi problem.

    Code:
    #include <avr/io.h>
    
    #include <avr/interrupt.h>

    #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
    #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
    #define tbi(sfr, bit) (_SFR_BYTE(sfr) ^= _BV(bit))


    volatile unsigned char DIODY,licznik=255,flaga_7ms=0;
    volatile unsigned char tablica[8]={255,3,2,10,10,2,3,255};//0 kompletne //wylaczenie 255 max

    void init(void);

    int main()
    {
    unsigned char i,a=0,b=10,a1=0,b1=0,licznik1=0,speed=7,program=0;
    unsigned char pom[8];
    unsigned int pomocniczy_licznik=0;

    init();

    while(1)
    {
    }
    return(0);
    }

    void init(void)
    {
    DDRD=0xff;
    PORTD=0xff;
    DDRB=0xff; //ustawienie linii portu B jako wyscie
    PORTB=0x00;
    //timer0
    TCCR0B = 0b00000001; //preskaler 1 (konieczne do ustawienia!!)
    TIMSK |= (1 << TOIE0); // aktywne przerwanie overflow
    TCNT0 = 6;
    sei();
    }
    //obsluga przerwania od timera
    SIGNAL (SIG_OVERFLOW0)
    {
    licznik--;
    DIODY=0;
    //diody 0-7
    if(tablica[7]>licznik){sbi(DIODY,PB0);}
    if(tablica[6]>licznik){sbi(DIODY,PB1);}
    if(tablica[5]>licznik){sbi(DIODY,PB2);}
    if(tablica[4]>licznik){sbi(DIODY,PB3);}
    if(tablica[3]>licznik){sbi(DIODY,PB4);}
    if(tablica[2]>licznik){sbi(DIODY,PB5);}
    if(tablica[1]>licznik){sbi(DIODY,PB6);}
    if(tablica[0]>licznik){sbi(DIODY,PB7);}

    if (licznik==0){flaga_7ms=1;}
    PORTB=DIODY;
    }


    Proszę poprawić tytuł!
    Robak
  • Tespol
  • #2
    mirekk36
    Level 42  
    Mogę powiedzieć tylko jedno, zmiana taktowania na 8MHz z wewn. oscylatora NICZEMU NIE MOŻE PRZESZKADZAĆ, więc to raczej wyssany z palca powód twoich problemów niestety. A jeśli do tego dołożyć jakieś problemy z działaniem układu w zależności od podłączenia lub nie takiego czy innego programatora do procesora to już w ogóle obraz przedstawia się nieciekawie - zapewne jeśli chodzi o same połączenia, brak jakiejś masy czy inną tego typu duperelę

    Nie analizuję nawet kodu bo jest napisany mega niedbale i ciężko się go czyta, szkoda na to czasu - a podejrzewam że i tu znajdą się kwiatki o które łatwo przy takim stylu pisania. Słyszał kolegia kiedykolwiek o tym co to są chociażby wcięcia ?
  • #3
    szelus
    Level 34  
    A jesteś pewien, że cała procedura obsługi przerwania "wyrabia się" w 256 taktach?
    To w zasadzie powinno się zachowywać deterministycznie, ale jeżeli jest "na styk" to może jakieś drobne przesunięcie zegara pomiędzy CLKIO i CLKCPU przy większej częstotliwości powoduje problemy z wyrabianiem się? Tylko hipoteza. :)
  • #4
    gousta
    Level 10  
    Szelus, procedura obsługi przerwania wyrabia się, bo przecież jak wyrabiało się przy 1Mhz w 256 taktach to przy 8 MHz będzie to samo tyle, że będzie to trwało krócej. Dla pewności jednak zredukowałem obsługę przerwania do obsługi tylko 1 pinu i problem nadal pozostał ten sam.

    Mirek36, piszesz, że to błąd w połączeniach, ale czy nie powinien on się także ujawniać przy 1MHz...? Testowałem dodatkowo wewnętrzny RC 4MHz i problem był identyczny, jednak już włączenie dzielenia częstotliwości przez 8 naprawiło sytuację.
    Widać więc wyraźnie, że mimo wszystko problem tkwi w dzielniku. Pomijając sprawę dziwnego zachowania w obecności programatora, to zostaję jeszcze analogiczne błędne działanie przy odłączonym programatorze tyle, że nie występuje ono przy po każdym zaniku zasilania. Wygląda to tak jakby uC miał problemu żeby "wstać" i zacząć poprawną realizację programu.

    Jeszcze raz podkreślam, że przy włączonym dzieleniu przez 8 żadne problemy nie występuję i to bez względu na to czy programator jest podłączony czy też nie.
  • #5
    szelus
    Level 34  
    A głupie pytanie - kondensatory blokujące na zasilaniu są?
    Może schemat jakiś czy rysunek płytki?
  • Tespol
  • #6
    gousta
    Level 10  
    Kondensatory są takie jak podane w datasheet stabilizatora (L7805CV 330nF-wejście, 100nF - wyjście). Dodatkowo mam dorzucony na wejściu stabilizatora kondensator elektrolityczny 470uF bo zasilam to ze starej transformatorowej ładowarki do komórki (5VDC, 300mA), bez niego układ nie chciał startować (pewnie przez tętnienia napięcia). Aby wyprzedzić pytanie za stabilizatorem napięcie jest prawidłowe - 4,7-4,95 V (zależne od obciążenia, mierzone prostym multimetrem).
  • Helpful post
    #7
    szelus
    Level 34  
    A 100n i elektrolit na końcówkach zasilania procesora?
  • Helpful post
    #8
    mirekk36
    Level 42  
    Kolejna osoba na forum, która zarzeknie się tysiąc razy, że wszystko od strony sprzętowej ma w 100% dobrze i sprawdzone, po to tylko żeby za 1001 razem przyznać po długim czasie z radością, że problem rozwiązany a powodem był jakiś zimny lut, niekontakt itp .... z uwagą, że opowiada o tym dla potomnych bo może się to przydać. Niestety takich wątków są tysiące na elektrodzie ;) i zwykle długo trzeba przekonywać autora takiego wątku, żeby w końcu przedstawił chociaż jakiś strzępek swojego schematu czy zdjęcie ustrosjtwa ....

    Mnie osobiście ciężko nawet myśleć nad takim problemem jak słyszę, że :

    "pomińmy narazie to, że się procesor resetuje czy nie pracuje po odłączeniu programtora bo przy innych częstotliwościach nie ma takiego efektu", - nie ważne, że nie ma wcięć w kodzie i że przez to byle jak traktuje się tych , do których zwraca się o pomoc ....

    jakie to typowe ;) ..... a dużo łatwiej byłoby - zamiast zapierać się nogami i rękami - jednak przedstawić rzeczowo problem ze schematem i ew fotką układu ;) .... ale cóż nie wszyscy lubią się uczyć na cudzych błędach

    eeeeh młodzież ;)
  • #9
    gousta
    Level 10  
    Widzę, że kolega mirekk36 strasznie doczepił się do tych wcięć w kodzie. Zgodzę się kod na pewno nie jest napisany zgodnie ze sztuką eleganckiego programowania, ale z drugiej strony nie popadajmy w histerie. Przy tak prostym programie który de facto składa się tylko z inicjalizacji portów, timera i obsługi przerwania nie jest to chyba czynnik który w istotny sposób przeszkadza w zapoznaniu się z kodem.
    Problem starałem się przestawić możliwie krótko i treściwie, rysowanie schematów podłączenia diod do uC i stabilizatora uznałem za nie konieczne (tym bardziej że nie mam stosownego oprogramowania), tak samo jak robienie zdjęć układu zbudowanego na płytce stykowej .Nie mniej jednak zamieszczam sposób podłączenia stabilizatora.
    Dziwny problem z Attiny 2313 przy RC 8MHz
    Kolega coś tam próbował cytować z mojej wypowiedzi, nie do końca rozumiem tego sens. Przypuszczam, że była to próba zrobienia ze mnie ignoranta. Celowo napisałem, że można odrzucić programator gdyż chciałem tym samym uprościć analizę problemu, ucinając dywagacje, jakoby to programator był głównym sprawcą problemu.
  • #10
    szelus
    Level 34  
    Ale na moje pytanie nie odpowiedziałeś...
    Kondensatory przy stabilizatorze są dla stabilizatora. Procesor musi mieć swoje.
  • #11
    mirekk36
    Level 42  
    gousta wrote:

    Mam następujący problem. Napisałem programowy 8 kanałowy PWM do sterowania diodami realizowany w przerwaniu. Wszystko działa do czasu rozłączenia i ponownego załączenia zasilania. uC się wysypuje i zdaje się wystawiać na wyjścia losowe stany. W przypadku połączonego programatora (druty z rezystorami pod LPT) sytuacja występuje po każdorazowym zaniku zasilania, przy braku programatora średnio 1 na 10 razy.

    Teraz najciekawsze: wszystko to występuje tylko wtedy gdy wyłączę dzielenie częstotliwości taktowania oscylatora przez 8 ( co daje częstotliwość równą 8 Mhz na wewnętrznym oscylatorze RC,wszystkie inne ustawienia fusów domyśle), w przypadku taktowania z prędkoscia 1 Mhz nic się nie wysypuje, ani w tym, ani w innych programach.


    Tu widać wyraźnie i jasno jakie problemy jakie opisujesz!

    gousta wrote:
    Co może być przyczyną takiego stanu rzeczy? Czy wyłączając dzielenie przez 8 należy podjąć jeszcze jakieś dodatkowe działania?


    Nie trzeba podejmować żadnych działań!


    ten twój cały kod, kóry powinien wyglądać tak:

    Code:

    #include <avr/io.h>
    #include <avr/interrupt.h>

    #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
    #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
    #define tbi(sfr, bit) (_SFR_BYTE(sfr) ^= _BV(bit))


    volatile unsigned char DIODY,licznik=255,flaga_7ms=0;
    volatile unsigned char tablica[8]={255,3,2,10,10,2,3,255};//0 kompletne //wylaczenie 255 max

    void init(void);

    int main()
    {
    //   unsigned char i,a=0,b=10,a1=0,b1=0,licznik1=0,speed=7,program=0;
    //   unsigned char pom[8];
    //   unsigned int pomocniczy_licznik=0;

       init();

       while(1) {
       }

    }

    void init(void) {
       DDRD=0xff;
       PORTD=0xff;
       DDRB=0xff; //ustawienie linii portu B jako wyscie
       PORTB=0x00;

       //timer0
       TCCR0B |= (1<<CS00);    //preskaler 1
       TIMSK |= (1 << TOIE0);    // aktywne przerwanie overflow
       TCNT0 = 6; // --> to jest niepotrzebne bo i tak nie ustawiasz TCNT0 w przerwaniu
       sei();
    }

    //obsluga przerwania od timera
    ISR(TIMER0_OVF_vect) {
       licznik--;
       DIODY=0;
       //diody 0-7
       if(tablica[7]>licznik){sbi(DIODY,PB0);}
       if(tablica[6]>licznik){sbi(DIODY,PB1);}
       if(tablica[5]>licznik){sbi(DIODY,PB2);}
       if(tablica[4]>licznik){sbi(DIODY,PB3);}
       if(tablica[3]>licznik){sbi(DIODY,PB4);}
       if(tablica[2]>licznik){sbi(DIODY,PB5);}
       if(tablica[1]>licznik){sbi(DIODY,PB6);}
       if(tablica[0]>licznik){sbi(DIODY,PB7);}

       if (licznik==0){flaga_7ms=1;}
       PORTB=DIODY;
    }


    (ja bym się wstydził rzucać na forum taki ochłap jak twój) .... jednak ma prawo działać poprawnie (naawet w takiej postaci jak ty napisałeś) i będzie się spokojnie wyrabiało przerwanie przy 8MHz i preskalerze=1. Wprawdzie obciążenie procesora przez przerwanie będzie rzędu 30-40% ale to i tak jeszcze dużo czasu pozostaje na działania w pętli głównej. W tym kodzie nie ma żadnego problemu jeśli chodzi o działanie z taktowaniem 8MHz! (Dodam, że przy taktowaniu 1MHz obciążenie procesora samym przerwaniem wzrasta do prawie 70-80% ale też powinno się wyrabiać bo pozostałe 20-30% też wystarczy na proste operacje sterujące PWM'ami)

    Jeśli zatem dalej będziesz twierdził, że wszystko inne masz dobrze (połączenia, i pozostały kod programu) to wcale nie sugeruję jakoby mógłbyś być ignorantem. Mówię wprost - jesteś ignorantem i to na maxa.

    Jeszcze raz podkreślę, że problemy występujące po resetowaniu procka, wyłączaniu zasilania czy rozłączaniu programatora mogą mieć duży wpływ na to co opisujesz. A że działa coś ci tam przy 4MHz a przy 8MHz już nie to wcale nie oznacza, że przy 4MHz masz wszystko idealnie. Poza tym może jeszcze odstawiasz kichę w pozostałej części kodu, no ale przecież ty wiesz, że na pewno nie! .... zatem jeszcze raz powtórzę, sam z siebie robisz ignoranta brąc dalej w zaparte. A ja wcale nie sugerowałem, że wszystko to wina programatora - to kolejny stek bzdur, które piszesz. Wina że to ci źle jest twoja a nie programatora czy też wewn. oscylatora 8MHz.
  • Helpful post
    #12
    hotdog
    Level 26  
    Ja bym zasilił urządzenie z czegoś pewnego przynajmniej na okres testów (USB, lub jakiś zasilacz laboratoryjny). Zwiększenie częstotliwości powoduje wzrost pobierania prądu przez mikroprocesor. Nie są to jakieś duże wartości. Ale moim zdaniem to kolejna zmienna którą należy wyeliminować.

    Pozdrawiam
  • #13
    gousta
    Level 10  
    Kolega hotdog trafił. Rzeczywiście problemem było zasilanie a konkretnie stara ładowarka transformatorowa do komórki. Po zasileniu układu z linii 5V z zasilacza ATX (z pominięciem stabilizatora bo tam jest już napięcie stabilizowane), wszystkie problemy ustały. Podobnie ma się rzecz w przypadku użycia innej ładowarki, tym razem impulsowej o większej wydajności prądowej (przez stabilizator).
    Problem z zasilaniem był rozpatrywany przeze mnie, przed zamieszczeniem posta. Niestety jednak popełniłem czeski błąd, który polegał na podłączeniu napięcia z zasilacza ATX (5V) do stabilizatora a nie bezpośrednio do uC, co skutkowało w dalszym ciągu błędnym działaniem układu.
    Nie wiem co dokładnie było nie tak z tą felerną ładowarką i raczej nie mogę tego stwierdzić bez oscyloskopu. Mimo, że zwykły multimetr wskazywał poprawne napięcie na uC (napięcie średnie), to jednak jego przebieg widocznie musiał być nieodpowiedni powodując zakłócenia pracy uC. Dodatkowo można wnioskować, ,że im większa częstotliwość taktowania uC tym wyższe wymagania co do jakości zasilania, co potwierdzają charakterystyki elektryczne umieszczone w karcie katalogowej Atmela.

    mirekk36, ta uwaga odnośnie kichy w pozostałej części kody była chyba trochę nietrafiona, bo skoro wrzucam kawałek kodu i opisuje problem, to występuje on przy tym konkretnie kodzie, gdyby było inaczej to na pewno byłoby to wyraźnie zaznaczone. Nie zauważyłem także abym szedł w zaparte, owszem uczepiłem się trochę tego dzielenia przez 8, no ale to wynikało z braku odpowiedniej wiedzy na temat działania uC, zapewne gdybym posiadał doświadczenie kolegi od razu zwróciłbym się w inną stronę.

    Korzystając z okazji, jeśli można chciałbym zadać pytanie.
    Zainteresowało mnie to co kolega napisał na temat obciążenia procesora przez przerwanie. W jaki sposób zostało oszacowane obciążenie procesora?? Nie rozumiem także dlaczego przy zjechaniu zegarem z 8 MHz do 1 MHz obciążenie wzrosło. Obsługa przerwania została przecież przetłumaczona na konkretną liczbę instrukcji maszynowych które wykonują się w konkretnej liczbie cyklów zegara (z tego co wiem większość instrukcji trwa 1 cykl). Tak więc jasne, że przy 8Mhz procedura wykona się szybciej (jeżeli chodzi o czas), ale też będzie ona częściej wywoływana, więc wydaje mi się że obciążenie procesora powinno być w tym wypadku niezależne od taktowania procesora.
  • #14
    jarekz_2
    Level 16  
    szelus wrote:
    Ale na moje pytanie nie odpowiedziałeś...
    Kondensatory przy stabilizatorze są dla stabilizatora. Procesor musi mieć swoje.

    No właśnie!
    Wydajność zasilacza to jedno, a blokowanie zasilania mikrokontrolera to druga sprawa. Między wyprowadzeniami masy i +5V musi być kondensator ceramiczny ok. 100nF, umieszczony nie dalej niż kilka mm od wyprowadzeń GND i VCC AVR-a!
    Mój kolega z pracy miał kiedyś dziwne problemy z ATmega; okazało się, że 100nF był oddalony od GND i VCC układu o jakieś 3cm.
    Równie ważny jest kondensator rzędu 10µF (np. tantalowy) między masą i +5V, z tym że nie musi być on umieszczony tak blisko mikrokontrolera.
  • #15
    mirekk36
    Level 42  
    gousta wrote:

    mirekk36, ta uwaga odnośnie kichy w pozostałej części kody była chyba trochę nietrafiona


    Zrozum, że miałem o tyle rację, że problemy u ciebie mogły występować w każdym innym miejscu niż ten kod który pokazałeś a co do którego upierałeś się, że powoduje błędy, i że przełączenie na 8MHz też je powoduje. Jeśli więc nie udostępniasz ani pozostałej części kodu ani schematu ani nie opisujesz dokładnie całej reszty tego co zrobiłeś - to później tak wygląda cała dyskusja. To jest wtedy zabawa w kotka i myszkę - czyli zgaduj zgadula. Aż ktoś w końu przypadkiem wpada na pomysł gdzie mogłeś zrobić babola. Tymczasem dobrze opisany problem i konkretne pytanie pozwoliłoby to rozwiązać przede wszyskim tobie dużo szybciej rozwikłać tę zagadkę. Rozumiesz? ... o pozostałej części kodu mówiłem, że może być kicha - a ty teraz właśnie oceniasz jak jakieś jury - kto dobrze odgadł konkurs.

    gousta wrote:
    Korzystając z okazji, jeśli można chciałbym zadać pytanie.
    Zainteresowało mnie to co kolega napisał na temat obciążenia procesora przez przerwanie. W jaki sposób zostało oszacowane obciążenie procesora??


    Na początek przepraszam ponieważ się walnąłem o tyle w obliczeniach zajętości procesora przez twoje przerwanie bo przyjąłem różne preskalery dla 1MHz i dla 8MHz. Zatem w efekcie końcowym oczywiście zarówno dla 1MHz i dla 8MHz będzie takie samo obciążenie ok 70%.

    a jak się je mniej więcej określa? jeśli cię to interesuje to dla przykładowych 8MHz tak


    1. ile zajmuje jeden takt zegara przy 8MHz = 125ns

    2. ile czasu upływa pomiędzy kolejnymi przerwaniami? 8MHz / 256 = 31250
    (256 bo timer akurat dzieli przez 256 a preskaler = 1) - zatem przerwanie odbywa się z częstotliwością 31,250kHz czyli czas pomiędzy przerwaniami to 32us prawda?

    3. zakładając że w przerwaniu nic nie jest wykonywane i że tylko ono jedno ma działać na procku to można powiedzieć, że obciążenie procesora wynosi 0% gdyż cały czas między przerwaniami jest przeznaczony na wykonywanie programu w pętli głównej. Te 32us to jest 100% czasu

    4. Po skompilowaniu kodu zajrzyj sobie do pliku *.lss gdzie zobaczysz kod w aseblerze. Sprawdź sobie ile instrukcji przypada na kod tego przerwania. Z tego już łatwo wyliczyć ile czasu będzie się wykonywało przerwanie bo wiemy w ilu cyklach zegara wykonują się poszczególne instrukcje. Ja po spojrzeniu na to oszacowałem tak na oko, że twój kod przerwania przy 8MHz będzie wykonywał się razem z prologiem i epilogiem ok 180cykli zegara. A 180 cykli zegara przy 8MHz to ok 22,5us

    skoro zatem

    32,0us - 100%
    22,5us - x%

    ;) czyli obciążenie wyjdzie ok 70% .... oczywiście to tylko przybliżony wynik bo chcąc dokładnie trzeba byłoby idealnie policzyć każdą instrukcję (sprawdzić) no ale przecież nie o to chodzi żeby obciążenie w takich przypadkach wyliczać co do 5 miejsca po przecinku. Wystarczy wiedzieć np że jest 40%, 60% czy 90% ale jak już ci wyjdzie 10% , 5% czy 1% to możesz spodziewać się kłopotów z czasami na wykonywanie zadań w pętli głównej
  • #16
    tymon_x
    Level 30  
    mirekk36 wrote:
    a jak się je mniej więcej określa? jeśli cię to interesuje to dla przykładowych 8MHz tak

    1. ile zajmuje jeden takt zegara przy 8MHz = 125ns
    2. ile czasu upływa pomiędzy kolejnymi przerwaniami? 8MHz / 256 = 31250
    (256 bo timer akurat dzieli przez 256 a preskaler = 1) - zatem przerwanie odbywa się z częstotliwością 31250kHz czyli czas pomiędzy przerwaniami to 32ns prawda?

    Aż przestałem dalej czytać :/
  • #18
    tymon_x
    Level 30  
    mirekk36 wrote:
    tymon_x wrote:

    Aż przestałem dalej czytać :/


    To dobrze, to nie było do ciebie :/ .... zamiast stroić focha spróbuj zaproponować inne/lepsze wytłumaczenie, wtedy twoje posty będą do czegoś przydatne.

    Jaki foch? Wytłumaczone dobrze, ale ten rząd... Spójrz jeszcze raz co podkreśliłem.
  • #21
    mirekk36
    Level 42  
    tymon_x wrote:
    khm, nie chce się czepiać, ale jeszcze gdzieś przecinka brakuje (;


    Nie, no wolałbym jasne zwrócenie uwagi i wcale wtedy nie traktowałbym jako czepiania się ;) ... ale chyba już znalazłem twój (mój) brakujący przecinek. Więc jeśli coś jeszcze widzisz to pisz wprost - bo ja mam sporo roboty i nie mam czasu siedzieć i analizować i dopieszczać tekstu ;) ...
  • #22
    tymon_x
    Level 30  
    mirekk36 wrote:
    Nie, no wolałbym jasne zwrócenie uwagi i wcale wtedy nie traktowałbym jako czepiania się ;) ... ale chyba już znalazłem twój (mój) brakujący przecinek. Więc jeśli coś jeszcze widzisz to pisz wprost - bo ja mam sporo roboty i nie mam czasu siedzieć i analizować i dopieszczać tekstu ;) ...

    Rozumiem, myślałem że pogrubienie tekstu w cytacie zwróci Twoją uwagę (; Będę zwracał się wprost, dokładniej gdzie i jak...
  • #23
    mirekk36
    Level 42  
    tymon_x wrote:
    mirekk36 wrote:
    Nie, no wolałbym jasne zwrócenie uwagi i wcale wtedy nie traktowałbym jako czepiania się ;) ... ale chyba już znalazłem twój (mój) brakujący przecinek. Więc jeśli coś jeszcze widzisz to pisz wprost - bo ja mam sporo roboty i nie mam czasu siedzieć i analizować i dopieszczać tekstu ;) ...

    Rozumiem, myślałem że pogrubienie tekstu w cytacie zwróci Twoją uwagę (; Będę zwracał się wprost, gdzie i jak...


    Wiem, że to oftop już i nie chcę się oczywiście sprzeczać o to czy zawsze ktoś zauważy pogrubienie tekstu - ja przyznam, że zwróciłem na nie uwagę dopiero jak napisałeś o tym - może mam wadę wzroku a może nie postrzegam tak jak ty ;) no tutaj ludzie się różnią - przyznasz .... a zawsze napisanie wprost pewnych rzeczy na pewno odniesie pożądany skutek. Tym bardziej, że zaglądam tu z doskoku na chwilkę.
  • Helpful post
    #24
    Janko69
    Level 12  
    Hej,

    koledzy podywagowali nad wcięciami i przecinkami - można i tak. A ja zaproponuję koledze gousta, żeby zmienił w Attiny konfigurację sprzętową (przez fusebits) i aktywował wykrywanie stanów nieustalonych zasilania (BOD - brownout detection) i związany z nim reset mikrokontrolera.

    Konkretnie polecam lekturę stron 27, 33 i 37 (bity SUT, CKSEL i BODLEVEL) noty aplikacyjnej http://www.atmel.com/dyn/resources/prod_documents/doc2543.PDF

    Jedna ważna kwestia przy zabawie z bitami konfiguracyjnymi. Bit zaprogramowany ma wartość zero i należy o tym pamiętać, bo łatwo sobie odciąć niechcący dostęp do dalszej komunikacji z mikrokontrolerem.
  • #25
    gousta
    Level 10  
    No rzeczywiście włączyłem BOD z progiem zadziałania 2.7V i problem zniknął, tym samym stara ładowarka będzie mogła jeszcze służyć:). Dziękuje koledze Janko69 za tak celną i rzeczową uwagę.