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