Czemu ATMEGA88 sie wiesza ?

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
Witam.

Pod AVR Studio 4.14 testuje takie cos :

#include <avr/io.h>
#include <util/delay.h>

void del()
{
        _delay_ms(109);
}

int main(void)
{
   DDRB = 0xFF;
   while(1)
   {
    del();
       PORTB ^= 1;
       PORTB ^= 2;
    del();
       PORTB ^= 4;
    del();
       PORTB ^= 8;
   }
   return 0;
}

No i dziala. Ale juz na przyklad dodanie po linii PORTB ^= 8; jeszcze
jednego del(); wiesza w tym miejscu procesor. Jest to w sumie tylko 1
przyklad jak go mozna zawiesic. Nie zmienialem w nim nic oprocz dzielenia
zegara przez 8.

Wie ktos co z nim moze byc ? Probowalem w sumie tez zupelnie innego
kompilatora i bylo dokladnie to samo. Testuje to na plytce ZL2AVR.



Re: Czemu ATMEGA88 sie wiesza ?

Quoted text here. Click to load it

to dziala:
   while (1)
   {
    del();
       PORTB ^= 1;
       PORTB ^= 2;
    del();
    del();
       PORTB ^= 4;
    del();
       PORTB ^= 8;
   }

a to chyba wisi na ostatnim del():
   while (1)
   {
    del();
       PORTB ^= 1;
       PORTB ^= 2;
    del();
       PORTB ^= 4;
    del();
       PORTB ^= 8;
   }

to wisi na jedynym del():
   while (1)
   {
    del();
       PORTB ^= 8;
   }



Re: Czemu ATMEGA88 sie wiesza ?
Quoted text here. Click to load it

A co masz podpiete pod te MOSI/PB3?
Moze przypadkiem programator, bezposrednio?

hej



Re: Czemu ATMEGA88 sie wiesza ?
Quoted text here. Click to load it

Probowalem rozne linie roznych portow i zawsze to samo. A programator nie
powinen miec wplywu bo sa bufory
miedzy nim a komputerem (TTL 244). Chyba nie sprawdzilem co bedzie jak go
odepne. Przeszedlem teraz na ATMEGA8
i przez chwile mialem wrazenie, ze sie tak samo miesza. Ale doprowadzilem do
porzadku wszystkie
ustawienia i wyglada na to, ze na ATMEGA8 dziala. Chociaz na 100% pewny nie
jestem czy sie
zaraz nie zacznie znowu wieszac.

Zauwazylem, ze najbardziej sie wieszalo przy krotkich czasach opoznien. Jak
zmienialem tam na delay_ms(100) to
sie raczej nie wieszalo. Pojecia nie mam co z tym jest.





Re: Czemu ATMEGA88 sie wiesza ?
Quoted text here. Click to load it

To zalezy czy programator zechce je wylaczyc.
Niby powinien, ale najprostszym sposobem
na sprawdzenie jest odlaczenie.

Po czym poznajesz, ze sie wiesza?

hej



Re: Czemu ATMEGA88 sie wiesza ?
Quoted text here. Click to load it

Po tym , ze przestaje wykonywac program. Mam podpiete diodki i widze gdzie
sie zatrzymuje.



Re: Czemu ATMEGA88 sie wiesza ?
Quoted text here. Click to load it

Twojego przypadku to pewnie nie dotyczy, ale może będzie przestrogą dla
innych - dodanie instrukcji wywalało mi programy (wieszały się lub szły w
krzaki) w dwóch przypadkach:
- gdy nie zdążałem na czas odświeżyć Watchdoga,
- gdy w procedurze dałem PUSH bez POP-a (lub na odwrót).

--
dziadek Ben
[z adresu wytnij co trzeba]


Re: Czemu ATMEGA88 sie wiesza ?
On Sun, 28 Jun 2009 11:47:22 +0200,  bagno wrote:
Quoted text here. Click to load it

A zagladales w kod ? Moze jakas glupote wygenerowal.

J.


Re: Czemu ATMEGA88 sie wiesza ?
Quoted text here. Click to load it

Kompilujesz na jakim poziomie optymalizacji? -O0 czy -Os?
Delay nie moze byc kompilowana z -O0.
Pokaz wydenerowany kod w assemblerze.

--
Inteligentny dom - http://idom.wizzard.one.pl
http://idom.sourceforge.net/
We've slightly trimmed the long signature. Click to see the full one.
Re: Czemu ATMEGA88 sie wiesza ?

Quoted text here. Click to load it

Ustawione jest -Os

Kod:

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000080  00000000  00000000  00000054  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .debug_aranges 00000020  00000000  00000000  000000d4  2**0
                  CONTENTS, READONLY, DEBUGGING
  2 .debug_pubnames 00000023  00000000  00000000  000000f4  2**0
                  CONTENTS, READONLY, DEBUGGING
  3 .debug_info   00000136  00000000  00000000  00000117  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_abbrev 000000cb  00000000  00000000  0000024d  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_line   0000014f  00000000  00000000  00000318  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_frame  00000030  00000000  00000000  00000468  2**2
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_str    000000bf  00000000  00000000  00000498  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0: 12 c0        rjmp .+36      ; 0x26 <__ctors_end>
   2: 2c c0        rjmp .+88      ; 0x5c <__bad_interrupt>
   4: 2b c0        rjmp .+86      ; 0x5c <__bad_interrupt>
   6: 2a c0        rjmp .+84      ; 0x5c <__bad_interrupt>
   8: 29 c0        rjmp .+82      ; 0x5c <__bad_interrupt>
   a: 28 c0        rjmp .+80      ; 0x5c <__bad_interrupt>
   c: 27 c0        rjmp .+78      ; 0x5c <__bad_interrupt>
   e: 26 c0        rjmp .+76      ; 0x5c <__bad_interrupt>
  10: 25 c0        rjmp .+74      ; 0x5c <__bad_interrupt>
  12: 24 c0        rjmp .+72      ; 0x5c <__bad_interrupt>
  14: 23 c0        rjmp .+70      ; 0x5c <__bad_interrupt>
  16: 22 c0        rjmp .+68      ; 0x5c <__bad_interrupt>
  18: 21 c0        rjmp .+66      ; 0x5c <__bad_interrupt>
  1a: 20 c0        rjmp .+64      ; 0x5c <__bad_interrupt>
  1c: 1f c0        rjmp .+62      ; 0x5c <__bad_interrupt>
  1e: 1e c0        rjmp .+60      ; 0x5c <__bad_interrupt>
  20: 1d c0        rjmp .+58      ; 0x5c <__bad_interrupt>
  22: 1c c0        rjmp .+56      ; 0x5c <__bad_interrupt>
  24: 1b c0        rjmp .+54      ; 0x5c <__bad_interrupt>

00000026 <__ctors_end>:
  26: 11 24        eor r1, r1
  28: 1f be        out 0x3f, r1 ; 63
  2a: cf e5        ldi r28, 0x5F ; 95
  2c: d4 e0        ldi r29, 0x04 ; 4
  2e: de bf        out 0x3e, r29 ; 62
  30: cd bf        out 0x3d, r28 ; 61

00000032 <__do_copy_data>:
  32: 10 e0        ldi r17, 0x00 ; 0
  34: a0 e6        ldi r26, 0x60 ; 96
  36: b0 e0        ldi r27, 0x00 ; 0
  38: e0 e8        ldi r30, 0x80 ; 128
  3a: f0 e0        ldi r31, 0x00 ; 0
  3c: 02 c0        rjmp .+4       ; 0x42 <.do_copy_data_start>

0000003e <.do_copy_data_loop>:
  3e: 05 90        lpm r0, Z+
  40: 0d 92        st X+, r0

00000042 <.do_copy_data_start>:
  42: a0 36        cpi r26, 0x60 ; 96
  44: b1 07        cpc r27, r17
  46: d9 f7        brne .-10      ; 0x3e <.do_copy_data_loop>

00000048 <__do_clear_bss>:
  48: 10 e0        ldi r17, 0x00 ; 0
  4a: a0 e6        ldi r26, 0x60 ; 96
  4c: b0 e0        ldi r27, 0x00 ; 0
  4e: 01 c0        rjmp .+2       ; 0x52 <.do_clear_bss_start>

00000050 <.do_clear_bss_loop>:
  50: 1d 92        st X+, r1

00000052 <.do_clear_bss_start>:
  52: a0 36        cpi r26, 0x60 ; 96
  54: b1 07        cpc r27, r17
  56: e1 f7        brne .-8       ; 0x50 <.do_clear_bss_loop>
  58: 0c d0        rcall .+24      ; 0x72 <main>
  5a: 10 c0        rjmp .+32      ; 0x7c <_exit>

0000005c <__bad_interrupt>:
  5c: d1 cf        rjmp .-94      ; 0x0 <__vectors>

0000005e <del>:
#include <avr/io.h>
#include <util/delay.h>

void del()
{
  5e: 88 ee        ldi r24, 0xE8 ; 232
  60: 93 e0        ldi r25, 0x03 ; 3
    milliseconds can be achieved.
 */
void
_delay_loop_2(uint16_t __count)
{
 __asm__ volatile (
  62: 28 ec        ldi r18, 0xC8 ; 200
  64: 30 e0        ldi r19, 0x00 ; 0
  66: f9 01        movw r30, r18
  68: 31 97        sbiw r30, 0x01 ; 1
  6a: f1 f7        brne .-4       ; 0x68 <del+0xa>
  __ticks = (uint16_t) (__ms * 10.0);
  while(__ticks)
  {
   // wait 1/10 ms
   _delay_loop_2(((F_CPU) / 4e3) / 10);
   __ticks --;
  6c: 01 97        sbiw r24, 0x01 ; 1
  __ticks = 1;
 else if (__tmp > 65535)
 {
  // __ticks = requested delay in 1/10 ms
  __ticks = (uint16_t) (__ms * 10.0);
  while(__ticks)
  6e: d9 f7        brne .-10      ; 0x66 <del+0x8>
 _delay_ms(100);
}
  70: 08 95        ret

00000072 <main>:

int main(void)
{
  72: 8f ef        ldi r24, 0xFF ; 255
  74: 84 bb        out 0x14, r24 ; 20
   DDRC = 0xFF;
   while(1)
   {
       PORTC = 0;
  76: 15 ba        out 0x15, r1 ; 21

       PORTC = 255;
  78: 85 bb        out 0x15, r24 ; 21
  7a: fd cf        rjmp .-6       ; 0x76 <main+0x4>

0000007c <_exit>:
  7c: f8 94        cli

0000007e <__stop_program>:
  7e: ff cf        rjmp .-2       ; 0x7e <__stop_program>





Re: Czemu ATMEGA88 sie wiesza ?
bagno pisze:

Quoted text here. Click to load it

Ten kod nijak się ma do kodu, który pokazałeś w swoim pierwszym poście.
A jeśli nawet tak prosty program ci nie działa, to musisz mieć coś
zwalone w sprzęcie. Pokaż schemat.

--
przeciez moje rozumowanie bylo bez skazy,
no sam bym wskoczyl do tego wulkanu,
We've slightly trimmed the long signature. Click to see the full one.
Re: Czemu ATMEGA88 sie wiesza ?

Quoted text here. Click to load it

Moze faktycznie to byla jakas wersja po przerobkach. To co tu wczesniej
wklejalem to byl najkrotszy
kod powodujacy zawieszanie a potem robilem rozne inne testy.

Quoted text here. Click to load it

http://www.btc.pl/pdf/zl2avr.pdf

Tam nie ma co byc zepsute. Chyba, ze to w jakis sposob nie wspolpracuje z ta
ATMEGA88. Na ATMEGA8 na razie
chodzi.



Re: Czemu ATMEGA88 sie wiesza ?
W dniu 28.06.2009 20:54, bagno pisze:
Quoted text here. Click to load it
po�cie.
Quoted text here. Click to load it

Ale to co tu wkleiles niczego nie zawiesza - z jakiegos powodu petla sie
skasowala i masz naprzemiennie z pelna predkoscia wystawiane na port 0 i
255, a ze tak kilka mln razy na sekunde to migania diody nie widzisz.
Pokaz prawdziwy przyklad robiacy problemy zamiast sciemy.

Quoted text here. Click to load it
zwalone
Quoted text here. Click to load it

Jak rozumiem na tej plytce zamieniles ATMega8 na ATMega88?
Tu masz liste roznic pomiedzy tymi procesorami:
http://www.atmel.com/dyn/resources/prod_documents/doc2553.pdf
Rozumiem, ze w AVR Studio wybrales wlasciwy procesor jako target, znaczy
ATMega88?
Zauwaz, ze roznice sa spore, w tym fuse bitow. Takze nie mozesz po
prostu przelozyc procesora, zaladowac ten sam kod i liczyc, ze zadziala.



--
Inteligentny dom - http://idom.wizzard.one.pl
http://idom.sourceforge.net/
We've slightly trimmed the long signature. Click to see the full one.
Re: Czemu ATMEGA88 sie wiesza ?

Quoted text here. Click to load it

Nic z tego nie rozumiem. Zmontowalem to drugi raz i na razie dziala. Nie
wiem co bylo nie tak.



Site Timeline