eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › Czemu ATMEGA88 sie wiesza ?
Ilość wypowiedzi w tym wątku: 14

  • 1. Data: 2009-06-28 09:47:22
    Temat: Czemu ATMEGA88 sie wiesza ?
    Od: "bagno" <b...@o...pl>

    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.



  • 2. Data: 2009-06-28 10:03:16
    Temat: Re: Czemu ATMEGA88 sie wiesza ?
    Od: "bagno" <b...@o...pl>

    bagno wrote:

    > No i dziala. Ale juz na przyklad dodanie po linii PORTB ^= 8; jeszcze
    > jednego del(); wiesza w tym miejscu procesor.

    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;
    }



  • 3. Data: 2009-06-28 11:00:40
    Temat: Re: Czemu ATMEGA88 sie wiesza ?
    Od: "bagno" <b...@o...pl>

    mw158979 wrote:
    > "bagno" <b...@o...pl> schrieb
    >>> No i dziala. Ale juz na przyklad dodanie po linii PORTB ^= 8;
    >>> jeszcze jednego del(); wiesza w tym miejscu procesor.
    >
    > A co masz podpiete pod te MOSI/PB3?
    > Moze przypadkiem programator, bezposrednio?

    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.





  • 4. Data: 2009-06-28 11:05:01
    Temat: Re: Czemu ATMEGA88 sie wiesza ?
    Od: "mw158979" <...@t...pl>

    "bagno" <b...@o...pl> schrieb
    > > No i dziala. Ale juz na przyklad dodanie po linii PORTB ^= 8; jeszcze
    > > jednego del(); wiesza w tym miejscu procesor.

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

    hej



  • 5. Data: 2009-06-28 11:26:41
    Temat: Re: Czemu ATMEGA88 sie wiesza ?
    Od: "mw158979" <...@t...pl>

    "bagno" <b...@o...pl> schrieb
    > mw158979 wrote:
    > > "bagno" <b...@o...pl> schrieb
    > >>> No i dziala. Ale juz na przyklad dodanie po linii PORTB ^= 8;
    > >>> jeszcze jednego del(); wiesza w tym miejscu procesor.
    > >
    > > A co masz podpiete pod te MOSI/PB3?
    > > Moze przypadkiem programator, bezposrednio?
    >
    > Probowalem rozne linie roznych portow i zawsze to samo. A programator nie
    > powinen miec wplywu bo sa bufory

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

    Po czym poznajesz, ze sie wiesza?

    hej



  • 6. Data: 2009-06-28 11:35:21
    Temat: Re: Czemu ATMEGA88 sie wiesza ?
    Od: "bagno" <b...@o...pl>

    mw158979 wrote:
    > "bagno" <b...@o...pl> schrieb
    >> mw158979 wrote:
    >>> "bagno" <b...@o...pl> schrieb
    >>>>> No i dziala. Ale juz na przyklad dodanie po linii PORTB ^= 8;
    >>>>> jeszcze jednego del(); wiesza w tym miejscu procesor.
    >>>
    >>> A co masz podpiete pod te MOSI/PB3?
    >>> Moze przypadkiem programator, bezposrednio?
    >>
    >> Probowalem rozne linie roznych portow i zawsze to samo. A
    >> programator nie powinen miec wplywu bo sa bufory
    >
    > To zalezy czy programator zechce je wylaczyc.
    > Niby powinien, ale najprostszym sposobem
    > na sprawdzenie jest odlaczenie.
    >
    > Po czym poznajesz, ze sie wiesza?

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



  • 7. Data: 2009-06-28 12:31:31
    Temat: Re: Czemu ATMEGA88 sie wiesza ?
    Od: "dziadek Ben" <j...@o...pl>

    > Ale juz na przyklad dodanie po linii PORTB ^= 8; jeszcze jednego del();
    > wiesza w tym miejscu procesor.

    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]


  • 8. Data: 2009-06-28 15:18:50
    Temat: Re: Czemu ATMEGA88 sie wiesza ?
    Od: J.F. <j...@p...onet.pl>

    On Sun, 28 Jun 2009 11:47:22 +0200, bagno wrote:
    >No i dziala. Ale juz na przyklad dodanie po linii PORTB ^= 8; jeszcze
    >jednego del(); wiesza w tym miejscu procesor.

    A zagladales w kod ? Moze jakas glupote wygenerowal.

    J.


  • 9. Data: 2009-06-28 15:44:23
    Temat: Re: Czemu ATMEGA88 sie wiesza ?
    Od: "T.M.F." <t...@n...mp.pl>

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

    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/
    Teraz takze forum dyskusyjne
    Zobacz, wyslij uwagi, dolacz do projektu.


  • 10. Data: 2009-06-28 16:47:01
    Temat: Re: Czemu ATMEGA88 sie wiesza ?
    Od: "bagno" <b...@o...pl>


    Użytkownik "T.M.F." <t...@n...mp.pl> napisał w wiadomości
    news:h2838o$472$2@atlantis.news.neostrada.pl...
    >> Wie ktos co z nim moze byc ? Probowalem w sumie tez zupelnie innego
    >> kompilatora i bylo dokladnie to samo. Testuje to na plytce ZL2AVR.
    >
    > Kompilujesz na jakim poziomie optymalizacji? -O0 czy -Os?
    > Delay nie moze byc kompilowana z -O0.
    > Pokaz wydenerowany kod w assemblerze.

    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>




strony : [ 1 ] . 2


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: