PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ein kleines ASURO-Geheimprogramm



stochri
12.09.2006, 09:53
Hallo Zusammen,
hier ein kleines Programm, dessen Funktionsweise geheim ist.

Nur soviel sei veraten: Das Programm versucht eine Eigenschalft von von nichtplanzlichen Lebewesen nachzubilden. Es funktionier erstaunlich gut. Wenn man es sieht, denkt man, ist ja klar, wie es funktioniert. Dann noch aber noch mal genauer hinschauen.

Der ASURO muss beim Start auf dem Boden stehen.

Viel Spaß beim ausprobieren.
stochri

linux_80
12.09.2006, 13:32
Hallo,
der fährt solange, bis der Motor etwas mehr Power fordert, dann dreht er um.
Da ich an meinem die Taster grad deaktiviert habe, geht das wohl durch abfrage der Batteriespannung, die bei Last auch etwas absinkt ?! :-k

Lunarman
12.09.2006, 13:54
brauch ich dafür die erweiterte lib?

linux_80
12.09.2006, 13:57
nein, das ist ja schon eine fertige HEX-Datei !
einfach flashen.

Lunarman
12.09.2006, 13:58
wenn ich mein flasher gefunden hab, tu ich das mal.

Asurokiller
12.09.2006, 22:40
Köntest Du mir bitte Die C-Datei zu diesem großartigen Programm schicken.
Danke

Lunarman
13.09.2006, 11:23
Das Ding ist geheim, dass heißt wohl dass er das nicht kann.

stochri
13.09.2006, 18:23
Kann ich schon, aber erst wenn Ihr rauskriegt, wie es funktioniert. Die bisherigen Vorschläge sind leider nicht richtig.

PicNick
13.09.2006, 18:44
Besser als HEX schaut's in Assembler aus.



.NOLIST
.INCLUDE "M8DEF.INC"
.LIST
INIT:
RJMP L_0x0026
INT0ADDR_:
RJMP L_0x005A
INT1ADDR_:
RJMP L_0x0172
OC2ADDR_:
RJMP L_0x0116
OVF2ADDR_:
RJMP L_0x005A
ICP1ADDR_:
RJMP L_0x005A
OC1AADDR_:
RJMP L_0x005A
OC1BADDR_:
RJMP L_0x005A
OVF1ADDR_:
RJMP L_0x005A
OVF0ADDR_:
RJMP L_0x005A
SPIADDR_:
RJMP L_0x005A
URXCADDR_:
RJMP L_0x005A
UDREADDR_:
RJMP L_0x005A
UTXCADDR_:
RJMP L_0x005A
ADCCADDR_:
RJMP L_0x01C4
ERDYADDR_:
RJMP L_0x005A
ACIADDR_:
RJMP L_0x005A
TWIADDR_:
RJMP L_0x005A
SPMADDR_:
RJMP L_0x005A
L_0x0026:
CLR r1
OUT SREG,r1
LDI YL,0x5F
LDI YH,0x04
OUT SPH,YH
OUT SPL,YL
LDI r17,0x00
LDI XL,0x60
LDI XH,0x00
LDI ZL,0xA2
LDI ZH,0x07
RJMP L_0x0042
L_0x003E:
LPM r0,Z+
ST X+,r0
L_0x0042:
CPI XL,0x7E
CPC XH,r17
BRNE L_0x003E
LDI r17,0x00
LDI XL,0x7E
LDI XH,0x00
RJMP L_0x0052
L_0x0050:
ST X+,r1
L_0x0052:
CPI XL,0x90
CPC XH,r17
BRNE L_0x0050
RJMP L_0x00AA
L_0x005A:
RJMP INIT
L_0x005C:
PUSH r14
PUSH r15
PUSH r16
PUSH r17
LDI r22,0x00
LDI r23,0x00
MOVW r24,r22
RCALL L_0x0622
LDS r16,0x0087
LDS r17,0x0088
LDS r14,0x0089
LDS r15,0x008A
LDI r24,0x2C
LDI r25,0x01
RCALL L_0x0680
LDS r18,0x0087
LDS r19,0x0088
SUB r18,r16
SBC r19,r17
LDS r24,0x0089
LDS r25,0x008A
SUB r24,r14
SBC r25,r15
ADD r18,r24
ADC r19,r25
MOVW r24,r18
POP r17
POP r16
POP r15
POP r14
RET
L_0x00AA:
LDI YL,0x5F
LDI YH,0x04
OUT SPH,YH
OUT SPL,YL
RCALL L_0x02CC
RCALL L_0x05E0
LDI r24,0x00
RCALL L_0x0342
LDI r22,0x08
LDI r24,0x60
LDI r25,0x00
RCALL L_0x0478
LDI r22,0x96
MOV r24,r22
RCALL L_0x031E
LDI r22,0x20
MOV r24,r22
RCALL L_0x032E
LDI r24,0xF4
LDI r25,0x01
RCALL L_0x0680
RCALL L_0x005C
MOVW YL,r24
SBIW YL,0x000A
L_0x00DA:
RCALL L_0x005C
MOVW r16,r24
LDI r22,0x09
LDI r24,0x6D
LDI r25,0x00
RCALL L_0x0478
MOVW r24,r16
RCALL L_0x0634
CP r16,YL
CPC r17,YH
BRGE L_0x00DA
LDI r22,0xFA
LDI r24,0x96
RCALL L_0x031E
LDI r22,0x10
MOV r24,r22
RCALL L_0x032E
LDI r24,0xE8
LDI r25,0x03
RCALL L_0x0680
LDI r22,0x96
MOV r24,r22
RCALL L_0x031E
LDI r22,0x20
MOV r24,r22
RCALL L_0x032E
LDI r24,0xF4
LDI r25,0x01
RCALL L_0x0680
RJMP L_0x00DA

L_0x0116:
PUSH r1
PUSH r0
IN r0,SREG
PUSH r0
CLR r1
PUSH r24
PUSH r25
PUSH XL
PUSH XH
LDS r24,0x008B
SUBI r24,0xFF
STS 0x008B,r24
LDS r24,0x008B
AND r24,r24
BRNE L_0x0160
LDS r24,0x008C
LDS r25,0x008D
LDS XL,0x008E
LDS XH,0x008F
ADIW r24,0x0001
ADC XL,r1
ADC XH,r1
STS 0x008C,r24
STS 0x008D,r25
STS 0x008E,XL
STS 0x008F,XH
L_0x0160:
POP XH
POP XL
POP r25
POP r24
POP r0
OUT SREG,r0
POP r0
POP r1
RETI
L_0x0172:
PUSH r1
PUSH r0
IN r0,SREG
PUSH r0
CLR r1
PUSH r18
PUSH r19
PUSH r20
PUSH r21
PUSH r22
PUSH r23
PUSH r24
PUSH r25
PUSH XL
PUSH XH
PUSH ZL
PUSH ZH
LDI r24,0x01
LDI r25,0x00
STS 0x0086,r25
STS 0x0085,r24
RCALL L_0x05C6
POP ZH
POP ZL
POP XH
POP XL
POP r25
POP r24
POP r23
POP r22
POP r21
POP r20
POP r19
POP r18
POP r0
OUT SREG,r0
POP r0
POP r1
RETI
L_0x01C4:
PUSH r1
PUSH r0
IN r0,SREG
PUSH r0
CLR r1
PUSH r18
PUSH r19
PUSH r20
PUSH r24
PUSH r25
PUSH XL
PUSH XH
PUSH ZL
PUSH ZH
LDS r24,0x007E
LDS r25,0x007F
OR r24,r25
BRNE L_0x01EE
RJMP L_0x0278
L_0x01EE:
LDS r20,0x0084
MOV ZL,r20
CLR ZH
SUBI ZL,0x80
SBCI ZH,0xFF
IN r24,ADCH
STD Z + 0,r24
AND r20,r20
BREQ L_0x0206
LDI r24,0x60
RJMP L_0x0208
L_0x0206:
LDI r24,0x61
L_0x0208:
OUT ADMUX,r24
MOV r18,r20
CLR r19
MOVW ZL,r18
SUBI ZL,0x80
SBCI ZH,0xFF
LDD r24,Z + 0
CPI r24,0x96
BRCC L_0x023C
MOVW XL,r18
SUBI XL,0x7E
SBCI XH,0xFF
LD r24,X
CPI r24,0x01
BRNE L_0x023C
MOVW ZL,r18
ADD ZL,r18
ADC ZH,r19
SUBI ZL,0x79
SBCI ZH,0xFF
LDD r24,Z + 0
LDD r25,Z + 1
ADIW r24,0x0001
STD Z + 0,r24
STD Z + 1,r25
ST X,r1
L_0x023C:
MOV r18,r20
CLR r19
MOVW ZL,r18
SUBI ZL,0x80
SBCI ZH,0xFF
LDD r24,Z + 0
CPI r24,0xA1
BRLO L_0x0270
MOVW XL,r18
SUBI XL,0x7E
SBCI XH,0xFF
LD r24,X
AND r24,r24
BRNE L_0x0270
MOVW ZL,r18
ADD ZL,r18
ADC ZH,r19
SUBI ZL,0x79
SBCI ZH,0xFF
LDD r24,Z + 0
LDD r25,Z + 1
ADIW r24,0x0001
STD Z + 0,r24
STD Z + 1,r25
LDI r24,0x01
ST X,r24
L_0x0270:
LDI r24,0x01
EOR r20,r24
STS 0x0084,r20
L_0x0278:
POP ZH
POP ZL
POP XH
POP XL
POP r25
POP r24
POP r20
POP r19
POP r18
POP r0
OUT SREG,r0
POP r0
POP r1
RETI
.DB 0x80, 0x91, 0x8C, 0x00, 0x90, 0x91, 0x8D, 0x00 ;........
.DB 0xA0, 0x91, 0x8E, 0x00, 0xB0, 0x91, 0x8F, 0x00 ;........
.DB 0xBA, 0x2F, 0xA9, 0x2F, 0x98, 0x2F, 0x88, 0x27 ;./././.'
.DB 0x20, 0x91, 0x8B, 0x00, 0x82, 0x0F, 0x91, 0x1D ; .......
.DB 0xA1, 0x1D, 0xB1, 0x1D, 0xBC, 0x01, 0xCD, 0x01 ;........
.DB 0x28, 0xE4, 0x30, 0xE0, 0x40, 0xE0, 0x50, 0xE0 ;(.0.@.P.
.DB 0x1D, 0xD2, 0xCA, 0x01, 0xB9, 0x01, 0x08, 0x95 ;........
L_0x02CC:
LDI r24,0x19
OUT TCCR2,r24
LDI r24,0x6E
OUT OCR2,r24
IN r24,TIMSK
ORI r24,0x80
OUT TIMSK,r24
OUT UCSRA,r1
OUT UCSRB,r1
LDI r25,0x86
OUT UBRRH,r25
LDI r24,0xCF
OUT UBRRL,r24
LDI r24,0x3F
OUT DDRB,r24
LDI r24,0xF4
OUT DDRD,r24
LDI r24,0xA1
OUT TCCR1A,r24
LDI r24,0x02
OUT TCCR1B,r24
OUT ADCSR,r25
CBI PORTD,PD7
LDI r24,0x00
RCALL L_0x0366
LDI r22,0x01
MOV r24,r22
RCALL L_0x037C
LDI r22,0x00
MOV r24,r22
RCALL L_0x037C
LDI r24,0x01
RCALL L_0x0342
LDI r22,0x20
MOV r24,r22
RCALL L_0x032E
LDI r22,0x00
MOV r24,r22
RCALL L_0x031E
SEI
RET
L_0x031E:
CLR r25
OUT OCR1AH,r25
OUT OCR1AL,r24
MOV r24,r22
CLR r25
OUT OCR1BH,r25
OUT OCR1BL,r24
RET
L_0x032E:
MOV r25,r24
IN r24,PORTD
ANDI r24,0xCF
OR r24,r25
OUT PORTD,r24
IN r24,PORTB
ANDI r24,0xCF
OR r24,r22
OUT PORTB,r24
RET
L_0x0342:
AND r24,r24
BRNE L_0x034A
CBI PORTB,PB0
CBI PORTD,PD2
L_0x034A:
CPI r24,0x01
BRNE L_0x0352
SBI PORTB,PB0
CBI PORTD,PD2
L_0x0352:
CPI r24,0x03
BRNE L_0x035A
SBI PORTB,PB0
SBI PORTD,PD2
L_0x035A:
CPI r24,0x02
BRNE L_0x0362
CBI PORTB,PB0
SBI PORTD,PD2
L_0x0362:
RET
.DB 0x08, 0x95 ;..
L_0x0366:
IN r18,PORTD
ANDI r18,0xBF
CLR r25
LDI r19,0x06
L_0x036E:
LSL r24
ROL r25
DEC r19
BRNE L_0x036E
OR r18,r24
OUT PORTD,r18
RET
L_0x037C:
MOV r25,r24
AND r24,r24
BRNE L_0x0386
AND r22,r22
BREQ L_0x0394
L_0x0386:
CBI PORTD,PD7
IN r24,DDRC
ORI r24,0x03
OUT DDRC,r24
IN r24,PORTC
ORI r24,0x03
OUT PORTC,r24
L_0x0394:
AND r25,r25
BRNE L_0x039A
CBI PORTC,PC1
L_0x039A:
AND r22,r22
BRNE L_0x03A0
CBI PORTC,PC0
L_0x03A0:
RET
.DB 0x08, 0x95, 0x85, 0xE4, 0x87, 0xB9, 0x36, 0x9A ;......6.
L_0x03AA:
SBIS ADCSR,ADIF
RJMP L_0x03AA
SBI ADCSR,ADIF
IN r18,ADCL
IN r24,ADCH
CLR r25
MOV r25,r24
CLR r24
ADD r24,r18
ADC r25,r1
RET
.DB 0x0F, 0x93, 0x1F, 0x93, 0xCF, 0x93, 0xDF, 0x93 ;........
.DB 0xEC, 0x01, 0x00, 0x91, 0x7E, 0x00, 0x10, 0x91 ;....~...
.DB 0x7F, 0x00, 0x10, 0x92, 0x7F, 0x00, 0x10, 0x92 ;........
.DB 0x7E, 0x00, 0x83, 0xE4, 0x87, 0xB9, 0x84, 0xE1 ;~.......
.DB 0xF6, 0xD0, 0x36, 0x9A ;..6.
L_0x03E4:
SBIS ADCSR,ADIF
RJMP L_0x03E4
SBI ADCSR,ADIF
IN r18,ADCL
IN r24,ADCH
CLR r25
MOV r25,r24
CLR r24
ADD r24,r18
ADC r25,r1
STD Y + 0,r24
STD Y + 1,r25
LDI r24,0x42
OUT ADMUX,r24
LDI r24,0x14
RCALL L_0x05CE
SBI ADCSR,ADSC
L_0x0406:
SBIS ADCSR,ADIF
RJMP L_0x0406
SBI ADCSR,ADIF
IN r18,ADCL
IN r24,ADCH
CLR r25
MOV r25,r24
CLR r24
ADD r24,r18
ADC r25,r1
STD Y + 2,r24
STD Y + 3,r25
STS 0x007F,r17
STS 0x007E,r16
POP YH
POP YL
POP r17
POP r16
RET
.DB 0xFC, 0x01, 0x84, 0xB3, 0x8C, 0x7F, 0x84, 0xBB ;........
.DB 0x97, 0x9A, 0x81, 0xE4, 0x87, 0xB9, 0x36, 0x9A ;......6.
L_0x0440:
SBIS ADCSR,ADIF
RJMP L_0x0440
SBI ADCSR,ADIF
IN r18,ADCL
IN r24,ADCH
CLR r25
MOV r25,r24
CLR r24
ADD r24,r18
ADC r25,r1
STD Z + 0,r24
STD Z + 1,r25
LDI r24,0x40
OUT ADMUX,r24
SBI ADCSR,ADSC
L_0x045E:
SBIS ADCSR,ADIF
RJMP L_0x045E
SBI ADCSR,ADIF
IN r18,ADCL
IN r24,ADCH
CLR r25
MOV r25,r24
CLR r24
ADD r24,r18
ADC r25,r1
STD Z + 2,r24
STD Z + 3,r25
RET
L_0x0478:
MOVW r20,r24
LDI r18,0x00
LDI r24,0x08
OUT UCSRB,r24
AND r22,r22
BREQ L_0x049A
L_0x0484:
SBIS UCSRA,UDRE
RJMP L_0x0496
MOVW ZL,r20
ADD ZL,r18
ADC ZH,r1
LDD r24,Z + 0
OUT UDR,r24
SUBI r18,0xFF
SUBI r22,0x01
L_0x0496:
AND r22,r22
BRNE L_0x0484
L_0x049A:
SBIS UCSRA,TXC
RJMP L_0x049A
LDI r18,0x00
L_0x04A0:
LDI r22,0x00
L_0x04A2:
SUBI r22,0xFE
CPI r22,0xFE
BRLO L_0x04A2
SUBI r18,0xFF
CPI r18,0xFE
BRLO L_0x04A0
RET
.DB 0xDC, 0x01, 0x70, 0xE0, 0x20, 0xE0, 0x30, 0xE0 ;..p. .0.
.DB 0x80, 0xE1, 0x8A, 0xB9, 0x41, 0x15, 0x51, 0x05 ;....A.Q.
.DB 0x01, 0xF1, 0x76, 0x17, 0xC0, 0xF4, 0xC9, 0x01 ;..v.....
.DB 0x21, 0xE0, 0x30, 0xE0, 0x84, 0x17, 0x95, 0x07 ;!.0.....
.DB 0x90, 0xF4 ;..
L_0x04D2:
SBIS UCSRA,RXC
RJMP L_0x04E6
MOVW ZL,XL
ADD ZL,r23
ADC ZH,r1
IN r24,UDR
STD Z + 0,r24
SUBI r23,0xFF
LDI r18,0x00
LDI r19,0x00
L_0x04E6:
CP r23,r22
BRCC L_0x04F6
MOVW r24,r18
SUBI r18,0xFF
SBCI r19,0xFF
CP r24,r20
CPC r25,r21
BRLO L_0x04D2
L_0x04F6:
CP r20,r18
CPC r21,r19
BRCC L_0x051A
LDI r24,0x54
ST X,r24
RET
L_0x0502:
CP r23,r22
BRCC L_0x051A
L_0x0506:
SBIS UCSRA,RXC
RJMP L_0x0516
MOVW ZL,XL
ADD ZL,r23
ADC ZH,r1
IN r24,UDR
STD Z + 0,r24
SUBI r23,0xFF
L_0x0516:
CP r23,r22
BRLO L_0x0506
L_0x051A:
RET
.DB 0x0F, 0x93, 0x1F, 0x93, 0xCF, 0x93, 0xDF, 0x93 ;........
.DB 0xC0, 0x91, 0x7E, 0x00, 0xD0, 0x91, 0x7F, 0x00 ;..~.....
.DB 0x10, 0x92, 0x7F, 0x00, 0x10, 0x92, 0x7E, 0x00 ;......~.
.DB 0x8B, 0x9A, 0x93, 0x9A, 0x84, 0xE4, 0x87, 0xB9 ;........
.DB 0x84, 0xE1, 0x47, 0xD0, 0x36, 0x9A ;..G.6.
L_0x0542:
SBIS ADCSR,ADIF
RJMP L_0x0542
SBI ADCSR,ADIF
IN r18,ADCL
IN r24,ADCH
CLR r25
MOV r17,r24
CLR r16
ADD r16,r18
ADC r17,r1
CBI PORTD,PD3
LDI r24,0x0A
RCALL L_0x05CE
STS 0x007F,YH
STS 0x007E,YL
MOVW r18,r16
CLR r20
CLR r21
LDI r22,0x00
LDI r23,0x40
LDI r24,0x9C
LDI r25,0x00
RCALL L_0x0744
MOVW XL,r20
MOVW r24,r18
LDI YL,0x06
L_0x057A:
LSL r24
ROL r25
ROL XL
ROL XH
DEC YL
BRNE L_0x057A
SUB r24,r18
SBC r25,r19
SBC XL,r20
SBC XH,r21
SUBI r24,0x68
SBCI r25,0x89
SBCI XL,0x09
SBCI XH,0x00
MOVW r22,r24
MOVW r24,XL
LDI r18,0x10
LDI r19,0x27
LDI r20,0x00
LDI r21,0x00
RCALL L_0x0744
MOVW XL,r20
MOVW r24,r18
CLR r25
POP YH
POP YL
POP r17
POP r16
RET
.DB 0x93, 0x98, 0x8B, 0x98, 0x85, 0xB7, 0x83, 0x7F ;........
.DB 0x85, 0xBF, 0x8B, 0xB7, 0x80, 0x68, 0x8B, 0xBF ;.....h..
.DB 0x08, 0x95 ;..
L_0x05C6:
IN r24,GIMSK
ANDI r24,0x7F
OUT GIMSK,r24
RET
L_0x05CE:
MOV r25,r24
LDS r24,0x008B
ADD r25,r24
L_0x05D6:
LDS r24,0x008B
CP r24,r25
BRNE L_0x05D6
RET
L_0x05E0:
CLI
IN r24,DDRC
ANDI r24,0xFC
OUT DDRC,r24
SBI PORTD,PD7
LDI r24,0xEF
OUT ADCSR,r24
LDI r24,0x61
OUT ADMUX,r24
LDI r24,0x01
LDI r25,0x00
STS 0x007F,r25
STS 0x007E,r24
SEI
LDI r22,0x00
LDI r23,0x00
MOVW r24,r22
RCALL L_0x0622
RET
.DB 0x10, 0x92, 0x7F, 0x00, 0x10, 0x92, 0x7E, 0x00 ;......~.
.DB 0x08, 0x95, 0x81, 0xE0, 0x90, 0xE0, 0x90, 0x93 ;........
.DB 0x7F, 0x00, 0x80, 0x93, 0x7E, 0x00, 0x08, 0x95 ;....~...
L_0x0622:
STS 0x0088,r25
STS 0x0087,r24
STS 0x008A,r23
STS 0x0089,r22
RET
L_0x0634:
PUSH YL
PUSH YH
IN YL,SPL
IN YH,SPH
SBIW YL,0x0006
IN r0,SREG
CLI
OUT SPH,YH
OUT SREG,r0
OUT SPL,YL
LDI r18,0x06
MOVW XL,YL
ADIW XL,0x0001
LDI ZL,0x77
LDI ZH,0x00
L_0x0652:
LD r0,Z+
ST X+,r0
DEC r18
BRNE L_0x0652
LDI r20,0x0A
LDI r21,0x00
MOVW r22,YL
SUBI r22,0xFF
SBCI r23,0xFF
RCALL L_0x069A
LDI r22,0x05
MOVW r24,YL
ADIW r24,0x0001
RCALL L_0x0478
ADIW YL,0x0006
IN r0,SREG
CLI
OUT SPH,YH
OUT SREG,r0
OUT SPL,YL
POP YH
POP YL
RET
L_0x0680:
PUSH YL
PUSH YH
CP r1,r24
CPC r1,r25
BRGE L_0x0694
MOVW YL,r24
L_0x068C:
LDI r24,0x48
RCALL L_0x05CE
SBIW YL,0x0001
BRNE L_0x068C
L_0x0694:
POP YH
POP YL
RET
L_0x069A:
MOV ZL,r22
MOV ZH,r23
MOV r18,ZL
MOV r19,ZH
CLT
CPI r20,0x02
BRLT L_0x06D8
CPI r20,0x25
BRGE L_0x06D8
CPI r20,0x0A
BRNE L_0x06BA
BST r25,7
BRTC L_0x06BA
COM r25
NEG r24
SBCI r25,0xFF
L_0x06BA:
MOV r22,r20
CLR r23
RCALL L_0x077A
SUBI r24,0xD0
CPI r24,0x3A
BRLT L_0x06C8
SUBI r24,0xD9
L_0x06C8:
ST Z+,r24
MOV r24,r22
MOV r25,r23
SBIW r24,0x0000
BRNE L_0x06BA
BRTC L_0x06D8
LDI r21,0x2D
ST Z+,r21
L_0x06D8:
MOV r25,r19
MOV r24,r18
STD Z + 0,r1
RJMP L_0x06E0
L_0x06E0:
MOVW XL,r24
MOVW ZL,r24
L_0x06E4:
LD r0,Z+
AND r0,r0
BRNE L_0x06E4
SBIW ZL,0x0002
L_0x06EC:
CP XL,ZL
CPC XH,ZH
BRCC L_0x06FE
LD r23,X
LDD r22,Z + 0
STD Z + 0,r23
SBIW ZL,0x0001
ST X+,r22
RJMP L_0x06EC
L_0x06FE:
RET
L_0x0700:
LDI XL,0x21
MOV r1,XL
SUB XL,XL
SUB XH,XH
MOVW ZL,XL
RJMP L_0x0726
L_0x070C:
ROL XL
ROL XH
ROL ZL
ROL ZH
CP XL,r18
CPC XH,r19
CPC ZL,r20
CPC ZH,r21
BRLO L_0x0726
SUB XL,r18
SBC XH,r19
SBC ZL,r20
SBC ZH,r21
L_0x0726:
ROL r22
ROL r23
ROL r24
ROL r25
DEC r1
BRNE L_0x070C
COM r22
COM r23
COM r24
COM r25
MOVW r18,r22
MOVW r20,r24
MOVW r22,XL
MOVW r24,ZL
RET
L_0x0744:
BST r25,7
MOV r0,r25
EOR r0,r21
RCALL L_0x0768
SBRC r21,7
RCALL L_0x0758
RCALL L_0x0700
RCALL L_0x0768
ROL r0
BRCC L_0x0766
L_0x0758:
COM r21
COM r20
COM r19
NEG r18
SBCI r19,0xFF
SBCI r20,0xFF
SBCI r21,0xFF
L_0x0766:
RET
L_0x0768:
BRTC L_0x0766
COM r25
COM r24
COM r23
NEG r22
SBCI r23,0xFF
SBCI r24,0xFF
SBCI r25,0xFF
RET
L_0x077A:
SUB XL,XL
SUB XH,XH
LDI r21,0x11
RJMP L_0x0790
L_0x0782:
ROL XL
ROL XH
CP XL,r22
CPC XH,r23
BRLO L_0x0790
SUB XL,r22
SBC XH,r23
L_0x0790:
ROL r24
ROL r25
DEC r21
BRNE L_0x0782
COM r24
COM r25
MOVW r22,r24
MOVW r24,XL
RET
.DB 0x0A, 0x0D, 0x41, 0x53, 0x55, 0x52, 0x4F, 0x20 ;..ASURO
.DB 0x4F, 0x4B, 0x0A, 0x0D, 0x00, 0x0A, 0x0D, 0x20 ;OK.....
.DB 0x73, 0x70, 0x65, 0x65, 0x64, 0x20, 0x00, 0x20 ;speed .
.DB 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00 ;


Also, alle Hacker ans Werk !

Norki
13.09.2006, 20:46
Hallo Leute!

Hier ist meine Theorie, wie das ganze funktionuckelt:

Ich bin mir absolut sicher, dass stochri die Odometrie nutzt, um zu gucken, ob die Motoren blockiert werden.
Er misst am Anfang der Fahrt(mit der Odometrie), wie schnell die Räder drehen. Fällt der Wert während der weiteren Fahrt signifikant darunter, nimmt er an, dass die Räder blockiert werden und asuro dreht um. Einfache Test, die meine Theorie bestätigen:
1.)Asuro in die Hand nehmen, und kurz nach dem Start ein weißes Blatt( wahlweise auch schwarzes) Papier zwischen Geberscheine und Fototransistor bei der Odometrie ==> Asuro dreht um

2.) Asuro schon am Anfang voll blockieren und dann fahren lassen ==> er dreht nicht mehr um, wenn Test 1.) gemacht wird. Smile


Oder war das jetzt zu simpel und es geht eigentlich um etwas anderes, was ich nicht bemerkt habe? #-o

gruß
Norki

stochri
14.09.2006, 16:50
@PicNic
Die Idee, das Ganze in Assembler anzuschauen, ist nicht schlecht. Aber von einem C-Compiler erzeugten Cde zu verstehen ist etwas schwierig.

@Norki

Hervoragende Analyse, sie stimmt exakt.
Ich habe mir schon überlegt, ob es wohl jemand schafft, die von Linux_80 angemerkte Idee mit dem Batteriespannungseinbruch von dem Verfahren mit der Messung der Radgeschwindigkei zu unterscheiden. Auf die Idee, einfach ein Papier vor die Encoderscheibe zu halten, bin ich nicht gekommen.

Eine kleine Anmerkung noch: wie immer war der Weg von der Idee des Verfahrens bis zur Realisierung langwieriger als gedacht. Man muss die Motoren nämlich mit einem geeignet kleinen Drehmoment betreiben, sonst rutschen die Räder an einem Hindernis zu stark durch.

Das Verfahren habe ich im Thread https://www.roboternetz.de/phpBB2/viewtopic.php?p=97674#97674 schon einmal verwendet.

Gruß,
stochri

stochri
14.09.2006, 16:59
#include "asuro.h" // bitte die neue Datei benutzen
// asuro.h und asuro.c vom 31.03.05

#define aus MotorDir(BREAK,BREAK)
#define go {MotorSpeed(150,150);MotorDir(FWD,FWD);}
#define backturn { MotorSpeed(150,250);MotorDir(RWD,RWD);Msleep(1000) ;}

/************************************************** ***********************************

ASURO discovers your apartment

program made by stochri july, 2005

************************************************** ***********************************/

int speed()
{
int rightspeed,leftspeed;
int leftold,rightold;

Encoder_Set(0,0); // reset encoder


leftold=encoder[LEFT];
rightold=encoder[RIGHT];
Msleep(300);
leftspeed=encoder[LEFT]-leftold;
rightspeed=encoder[RIGHT]-rightold;

//SerWrite(" speed Left,Right ",19);
//PrintInt(leftspeed);
//PrintInt(rightspeed);
return leftspeed+rightspeed;
}

int main(void)
{
int n,v,nullspeed;

Init();
Encoder_Init();
StatusLED(OFF);
SerWrite("\n\rASURO OK\n\r",8);

go;
Msleep(500);

nullspeed=speed()-10;

while(1)
{
v=speed();
SerWrite("\n\r speed ",9);
PrintInt(v);

if(v<nullspeed)
{
backturn;
go;
Msleep(500);
}

}
return 0;
}


Das Ziel des Verfahrens war es, dem Asuro eine Art "Gefühl" beizubringen. Der Asuro merkt sozusagen, dass die Belastun seiner Motoren zu hoch wird und fährt dann in einer Kurve rückwärts.
Das Interessante an diesem Verfahren ist, dass der Asuro so durch die ganze Wohnung fahren kann, was bei einer Methode bei der nur die Tasten abgefragt werden, nicht funktioniert.[/quote]

Norki
14.09.2006, 18:22
Hallo alle zusammen!
Yeah ! \:D/

Lustig dabei ist, dass ich mir vor ein paar Tagen auch schon überlegt hatte, auch ein "Kollisionsprogramm" zu schreiben, welches über die Odometrie funktioniert. Bin aber leider noch nicht dazu gekommen. Hauptantrieb dafür war, dass PollSwitch trotz abändern der Formel so lala funktioniert.

Ich wollte aber im Gegensatz zu dir feste Odowerte nehmen, abgelesen aus einem Geschwindigkeits-PWM-Diagramm und dann die entsprechenden Odowerte berechnen. Schöner ist natürlich, das variabel beim Start zu erledigen.

Problem ist hier wirklich, dass an einer Teppichkante Asuro bei mir so festhängt, dass die Räder eigentlich normal weiterdrehen.

Und was fast du gemacht, um das Problem zu lösen?
Einfach langsam genug fahren?

Man könnte ja auch die Räder mit Haarspray einschmieren oder mitm Prittstift, um die Haftung zu erhöhen :D.

Nur man muss gucken, dass man dann nicht selber putzen muss, nachdem Asuro durch Haus geflitzt ist 8-[


Ähm, ich hab dann noch ein paar Fragen zu den Motoren. Macht es was, die Motoren zu blockieren? Also mechanischen oder elektrischen Schaden? Sollte es doch eigentlich nicht, oder?
Kann man denn den zurückfließenden Strom der Motoren irgendwie messen?

Ok, das wars erstmal,

gruß
Norki

PicNick
14.09.2006, 18:35
..von einem C-Compiler erzeugten Cde zu verstehen ist etwas schwierig.
Ja, das hat was. :-)

Mangels Asuro wär mir halt kein anderer Weg offengestanden.

michael.bend
18.09.2006, 22:17
"Das Interessante an diesem Verfahren ist, dass der Asuro so durch die ganze Wohnung fahren kann, was bei einer Methode bei der nur die Tasten abgefragt werden, nicht funktioniert.[/quote]"

... stimmt, ich hatte schon öfter überlegt beide Taster aus der Mitte an die Ränder der Platine zu setzen um ein Verhaken am Stuhl o.ä. zu verhindern. Ich habe dann die beiden mittleren Taster benutzt um einen Golfball per Kollisionsabfrage zu dribbeln und darüber die Tasterverpflanzung vergessen.

Nun aber die eigentliche Frage: ist nach einer solchen Modifikation der Asuro noch ein Asuro oder ggf. eine unwürdige Mutation? Muß der Asuro im Originalzustand verbleiben?


Grüße, (Michael)

murph
19.09.2006, 12:04
Daumen hoch, sowas in der Art wollte ich meinem bot auch noch beibringen, aber echt faszinierend...

Du benutzt für die odometrie den standard encoder? bei dem geht bei mir garnix, da stehen doch nur feste werte drin?!?!

stochri
22.09.2006, 13:00
@michi.bend

Nun aber die eigentliche Frage: ist nach einer solchen Modifikation der Asuro noch ein Asuro oder ggf. eine unwürdige Mutation? Muß der Asuro im Originalzustand verbleiben?

Es ist immer gut, wenn der ASURO im Orginalzustand verbleibt, dann kann jeder das Programm ohne große Umbaumaßnahmen ausprobieren.

stochri
22.09.2006, 13:22
@Norki

Problem ist hier wirklich, dass an einer Teppichkante Asuro bei mir so festhängt, dass die Räder eigentlich normal weiterdrehen.

Und was fast du gemacht, um das Problem zu lösen?
Einfach langsam genug fahren?

Ich habe mal eine Weile nachgedacht, welches mechanische Modell eigentlich hinter dem Verfahren steckt.

Damit der Asuro fährt, muss das Radmoment größer als die Haftreibung des Tischtennisballs sein.

Für das Verfahren wäre es am Besten, wenn die Räder nie durchdrehen würden ( immer Haftreibung der Räder ). Dann würde bei einem Stop des ASURO die Radgeschwindigkeit auf 0 abfallen, was sehr leicht zu detektiere wäre.

Leider drehen die Räder durch und die Geschwindigkeit der Motoren verringert sich etwas, fällt aber nicht auf Null ab.

Derr Betrag der Radgleitreibung ist etwas größer als die Haftreibung des Tischtennisballs ist.Der erhöhte Betrag führt zu der leichten Verringerung der Motordrehzahl.

Eigentlich sollte die Funktion leicht verbessert werden können, wenn man die Batterrien etwas nach hinten verlagert. Dann sinkt die Haftreibung des Tischtennisballs und bei einem Stop des ASURO ist die Gescschwindigkeitsdifferenz höher.

Falls man das ganze ingenieurwissenschaftlich in Zahlen fassen will, sind diese Threads hilfreich:

https://www.roboternetz.de/phpBB2/viewtopic.php?p=102904#102904
https://www.roboternetz.de/phpBB2/viewtopic.php?t=11447

Asurokiller
24.09.2006, 18:56
bitte die neue Dateien benutzen asuro.h und asuro.c vom 31.03.05



Wo bekomm ich die den her?

stochri
25.09.2006, 13:24
Probiere einfach die Asuro-Lib von sourceforge ( google hilft Dir )

Ansonsten könnte die in der motor.zip https://www.roboternetz.de/phpBB2/viewtopic.php?t=11256)
auch funktionieren

Asurokiller
25.09.2006, 18:41
die vom link geht nicht

stochri
25.09.2006, 19:32
Da müsstest Du vielleicht noch mal selber suchen ....

Asurokiller
26.09.2006, 18:17
Such selber oder lass es blebein.

Ich habs schon gefunden.

inka
29.01.2007, 16:50
ich habe jetzt die geheim.hex auch in den asuro geflasht, es passiert folgendes:

er fährt los, nach zwei/drei mal anstossen und weg-drehen fängt er sich an nur noch rückwärts zu drehen, fährt wieder ein stück vor und dreht nach hinten wieder, allerdings ohne irgendwo anzustossen??? Fährt also praktisch am gleich fleck...

woran kann das liegen?

stochri
29.01.2007, 16:56
Hallo Inka,

der ASURO sollte eigentlich an der Verringerung der Drehzahl bemerken, dass er irgendwo angestoßen ist. Wenn er ohne erkennbaren Grund umkehrt, kann es sein, dass die Encoder nicht richtig funktionieren. Die musst du mal irgendwie testen.

Gruss,
stochri

inka
29.01.2007, 17:28
hi stochri,

habe vorischtshalber die odometriesensoren, die richtig montiert sind nachgelötet, den original-selbsttest durchgeführt, die veränderung hell/dunkel wird durch das aufleuchten der status-LED bestätigt.
Trotzdem kehrt der asuro ohne erkennbaren grund um, ich habe allerdings den (subjektiven) eindruck, dass er damit später anfängt als vorner...
Noch´ne idee?
danke

Danjo00
29.01.2007, 19:20
also bei mir fährt er im kreis und wenn er anhält kurtz rückwärts so das er ein neuen kreis fahren kann ist das richtig oder sollte er eher gerade fahren???

inka
29.01.2007, 19:28
also so wie ich verstanden habe soll er geradeaus fahren, bis er auf ein hindernis stösst, dann zurücksetzen und in eine andere richtung weiterfanren.
Frage: sollte bei der richtung in die er zurücksetzt nicht unterschieden werden ob er später links, oder rechts weiterfahren soll? (jee nachdem ob die linken, oder rechten taster betätigt wurden).
Ich weiss nicht ob ich es verständlich ausgedrückt habe - momentan setzt er ja immer in die gleiche richtung zurück - das würde ja wenig sinn machen, wenn er z.b. aus einem raum rausfinden soll, oder?

Danjo00
29.01.2007, 19:33
Hallo inka soweit wie ich sehen kann funktioniert es nur durch die Odometrie nicht über die taster sobald er nur noch weiss oder schwartz anzeigt( also das rad blockiert wird fährt er so rückwärts wo er herkam)

edit: wie prüfst du den die Odometrie beim selbstest duch ein weisses blatt oder mit drehen an den rädern bis die LED rot oder grün leuchtet? Und welsches ziffern Blatt hast du augeklibt auf das zahnrad bzw die schwarz weiss dinger do^^

inka
29.01.2007, 19:37
durch ein weisses blatt

edit:mann sollte schon bis zum ende lesen, bevor man antwotet. ich habe die odoblätter mit 6 schawrzen feldern

Danjo00
29.01.2007, 19:59
Maja ich kann nichts lesen das du das geschrieben hast aber probiere den selbsttest mal mit den reifen drehen. Hast du auch von hinten gesehen links weiss rosa und rechts rosa weiss?

inka
29.01.2007, 20:07
das habe ich inzwischen erfolgreich gemacht und die weiss/rosa kombination stimmt auch...

Danjo00
29.01.2007, 20:24
hmm dann kann ich dir auch net weiter helfen mal auf Stochri warten (den genie). aber irgendwie merkwürdig ist das schon bei mir funktionierts mal. anleitung geschaut und wiederstände geprüft die dafür sin bzw. anderes? aber kann mir nicht vorstellen das es daran ligt weil der selbsttest ja funktioniert aber mal vorsichtshalber


edit: wie oft hast du ihn den hintereinander anstossen lassen???? frage nur damit ich es auch ausprobieren kann. Eventuell noch mal die Batterien checken ob sie wirklich voll sind.

stochri
29.01.2007, 20:26
Falls die Odometriesensoren gut funktionieren, könnte es auch sein, dass der Untergrund auf dem der ASURO fahren soll, zu stark unterschiedliche Reibungen aufweist, oder die Batterien sehr schwach sind oder die Motoren etwas zu langsam laufen.

Du kannst den ASURO mal auf eine glatte Tischplatte setzen und ihn dort gegen ein Hindernis fahren lassen. Bei meinem ASURO habe ich vor kurzem festgestellt, dass die Räder kaum noch Gripp hatten und ständig durchgerutscht sind. Sie waren vom vielem auf dem Boden rumfahren zu schmutzig. Nachdem ich sie mit Alkohol greinigt hatte, ging es wieder.

Bei den Odometriesensoren könnte es auch sein, dass es zu hell bei Dir im Zimmer ist. Probiere es mal mit sehr wenig Licht.

Ansonsten könntest Du im Programm die Default-Werte für die Motorgeschwindigkeit etwas herunter oder heraufsetzen und dann schauen, was passiert.

So weit erst mal,
stochri

Danjo00
29.01.2007, 20:35
Super Stochri wollte so inetwa schreiben^^ mr ist es auch afgefallen das der kleinste wieder stand z.b. den motor zu eng and den zahnrädern hängt schon rückwärts fährt und dann halt mit dem rutschen halt aber Stochri war ja schneller^^

inka
29.01.2007, 21:13
also ich bin mir jetzt fast sicher, dass es das umgebungslicht ist. Zunächst mal stand der asuro ca. 2h auf dem schreibtisch. Dann fuhr er im halbdunkeln gut 5`einwandfrei, nachdem ich das deckenlicht dazugeschaltet habe auch noch.
Als ich ihn beim eingeschaltetem deckenlicht wieder startete fing er gleich an zu bocken. Die batterien sind neu, der asuro auch, deshalb würde ich dort (schlupf /alte baterien) die probleme ausschliessen.
Jetzt habe ich das gleiche noch einmal probiert, mit dem deckenlicht ist es reproduzierbar.
Ich werde also jetzt irgendwelche lichabschirmung für die odosensoren basteln.
danke für Euere hillfe

Danjo00
29.01.2007, 22:28
Gut ist ja schön das es nur daran lag viel spass noch :-) <--- dat is aber ein hässlicher lächel smily^^

inka
30.01.2007, 08:03
etwas frustriert bin ich heut frueh schon:
asuro eingeschaltet und er bockt schon wieder und fährt nur kresisegmente rückwärts und kurze gerade stuecken vorwärts, schön abwechaselnd immerhin.
Also werde ich heute nachmittag weiterbasteln. Lichtabschirmung, mit den "Default-Werte für die Motorgeschwindigkeit" spielen.
Es wurden hier verschiedene formen der odo-scheiben diskutiert, mit "schäg" geformten sw/ws segmenten. kann sowas auch helfen um die odometrie allgmein zu verbessern, oder ist es nur genauigkeitserhöhung?

inka
31.01.2007, 15:31
nachdem ich die schwarzen flächen der odo-scheiben nochmals mit schwarzem stift nachgezogen habe, das axiale spiel des odo-rades noch etwas eingeengt habe und die odo-sensoren mit einer "kappe versehen habe tuts jetzt.
Auch reproduzierbar, man kann ja den asuro direkt mit der taschenlapme "ärgern", sprich die odosensoren anstrahlen, da hilft auch die kappe nichts und er setzt zurück...

stochri
31.01.2007, 17:41
Hallo Inka,

bei einer Messung der Odometriespannungen mit dem Oszilloskop habe ich festegestellt, dass die Signalamplitude umso größer ist, je näher die Encoderscheiben bei den Lichtsensoren sind. Die Unterlegsscheibe geht demnach genau in die falsche Richtung.
Ausserdem sind die Signal für links und rechts unterschiedlich, da die Sensoren auf beiden Seiten jeweils anders angeordnet sind.
Eine Verbesserung der Odometrie könntest Du vielleicht zusätzlich erreichen, wenn Du die Schaltschwellen an die Signale an Deinem ASURO anpasst.

Gruss,
stochri

inka
31.01.2007, 17:56
hi stochri,



Eine Verbesserung der Odometrie könntest Du vielleicht zusätzlich erreichen, wenn Du die Schaltschwellen an die Signale an Deinem ASURO anpasst.

was beudet das im klartext?

danke

inka
04.02.2007, 10:53
hat jemand schon mal eine idee entwickelt, wie man die zahnräder (mit den scheiben auf der richtigen seite) festmacht?
Ich habe noch einmal die abschirmung der odosensoren gegen streulicht etwas verbessert (der plastik-fingerhut meiner frau musste dran glauben :-$ )

damaltor
04.02.2007, 14:35
nimm einne büroklammer, schneide ein stück ab, und bege es zu einem U. mit etwas glück und geschick kannst du dieses U dann auf das äussere ende der achse klemmen.

Hans Z
04.02.2007, 19:19
Hallo Inka,

schöne Bilder hast Du da gemacht.
Ach ja, das Geheimprogramm habe ich leider noch nicht durchschaut. :-$ :-b

Viele Grüße, Hans.

inka
09.02.2007, 16:18
ja, da bin ich ehrgeizig :-), ich habe für die wellensicherung keine büroklammer genommen, sondern eine windung einer druckfeder mit einem innendurchmesser der etwas größer als der wellendurchmesser ist mit dem seitenschneider abgezwickt, diese windung mit einer kleinen rundzange etwas zusammengedrückt und auf die welle geschoben...

steveLB
14.02.2007, 08:56
soweit ich die erfahrung vom ersten post beurteilen kann, wird einfach der strom den der motor braucht über einen shunt- widerstand gemessen und in spannung umgewandelt. mit dieser spannung geht man an ein AD port des µc und übersetzt so die einzelnen belastungen in werte, die man dann im programm selbst nutzt . Die spannung am shunt- widerstand hat ein ähnlichen verlauf wie das von fotodioden oder anderen senoren ..
gruß

luckylukas92
07.09.2008, 19:31
bei mir fehrt er los.....bis er an ne wand knallt und dann passiert garnichtsmehr... woran kann das liegen?

Jurii11
22.05.2009, 14:22
Servus @ all,

das ist ein sehr interessantes Projekt. Hat jemand jetzt mal den Hex-Code umgewandelt?
Bzw die Source

MfG Jurii

radbruch
22.05.2009, 15:06
Hallo Jurii,

willkommen im RN-Forum.

Ich bin erstaunt wie schnell du diesen Thread hier gefunden hast. Er wäre meine Antwort auf deine Frage nach dem Unterschied zwischen Gegenstand und Mauer gewesen [Link (https://www.roboternetz.de/phpBB2/viewtopic.php?t=48175)] :)

Der Weg scheint nun ja klar: Vorsichtig Gas geben und prüfen, ob sich die Räder mit Grip drehen oder "wild" durchdrehen. Ob es einen öffentlichen Quellcode zum "Geheimprogramm" gibt weiß ich leider nicht.

Gruß

mic

Jurii11
25.05.2009, 12:09
Servus @ all,

habe jetzt mal versucht das Programm, was Storchi gepostet hat zu flashen.( nicht die fertige Hex, sondern den Quellcode von Seite ein) Complieren hat mit der Motor-Lib auch geklappt. Leider läuft der Asuro damit nicht und gibt nur grün/rote Ledsignale.


Kann mir jemand helfen?


#include "asuro.h" // bitte die neue Datei benutzen
// asuro.h und asuro.c vom 31.03.05

#define aus MotorDir(BREAK,BREAK)
#define go {MotorSpeed(150,150);MotorDir(FWD,FWD);}
#define backturn { MotorSpeed(150,250);MotorDir(RWD,RWD);Msleep(1000) ;}

/************************************************** ***********************************

ASURO discovers your apartment

program made by stochri july, 2005

************************************************** ***********************************/

int speed()
{
int rightspeed,leftspeed;
int leftold,rightold;

Encoder_Set(0,0); // reset encoder


leftold=encoder[LEFT];
rightold=encoder[RIGHT];
Msleep(300);
leftspeed=encoder[LEFT]-leftold;
rightspeed=encoder[RIGHT]-rightold;

//SerWrite(" speed Left,Right ",19);
//PrintInt(leftspeed);
//PrintInt(rightspeed);
return leftspeed+rightspeed;
}

int main(void)
{
int n,v,nullspeed;

Init();
Encoder_Init();
StatusLED(OFF);
SerWrite("\n\rASURO OK\n\r",8);

go;
Msleep(500);

nullspeed=speed()-10;

while(1)
{
v=speed();
SerWrite("\n\r speed ",9);
PrintInt(v);

if(v<nullspeed)
{
backturn;
go;
Msleep(500);
}

}
return 0;
}


MfG Jurii

Valen
25.05.2009, 15:31
Na, dan ist irgendwie das falsche quelcode compiliert, oder nicht gut im asuro geflashed. Weil den Statusled aus gehen solte wenn den bootloader fertig ist. Grun sollte es gar nicht leuchten in Stochri's code.

Jurii11
25.05.2009, 15:38
Hallo Valen,

habe jetzt nochmal mit den Lib gespielt und nun flasht er zwar Alles richtig aber der Asuro bleibt stumm "stehen". Die Geheim.hex umfasst auch 32pages im Gegensatz zu meiner compilierten mit 28pages.

Habe einfach die Dateien aus der Motor.zip in den Avr-Lib Ordner kopiert.

MfG Jurii, der am Verzweifeln ist :-(

Valen
25.05.2009, 16:47
Ich denke nicht das es im AVR-Lib order am richtigen platz ist. Die dateien sehen aus wie fur einer normalen Asuro program, ahnlich wie den Firsttry oder Selbtest Ordner. Denn test.c in diesen motor.zip lasst den Statusled blinken. Also ist nicht die quelcode oben compiliert sonnst die motor.zip test.c. Ich furchte du muss den AVR compiler und so wieder neu instalieren damit es wieder gut wirkt. Moglich hast du den wichtigen dateien uberschrieben.

Welches Lib brauchst du eigentlich. Den orginalen lib vom Asuro-CD oder die neue erweiterten Lib (2.7 oder 2.8 ) von Sourceforge?

Jurii11
25.05.2009, 16:53
Hallo Valen,

habe gerade die 2,71 Lib laut der Anleitung installiert. Sollte jetzt eigentlich funktionieren. Die Hex Datei ist jetzt auch nur noch 11pages gross und der Asuro leuchte grün auf. Mehr tut er aber auch nicht.

Ich versuche jetzt noch ein bisschen und ansonsten muss ich wohl das Handtuch werfen und aufgeben.

MfG Jurii

Jurii11
25.05.2009, 17:17
Servus @ all,

so habe jetzt nochmals Alles deinstalliert und nun nach den Anleitung in der Lib neuinstalliert.

Wenn ich nun ein eigenes Projekt anfertige und compiliere kommt folgende Fehlermeldungen



> "C:\ASURO_SRC\FirstTry\Test-all.bat"

C:\ASURO_SRC\FirstTry>make all
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -IC:/ASURO_SRC/AsuroLib/lib/inc -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=C:/ASURO_SRC/AsuroLib/lib/asuro.lst C:/ASURO_SRC/AsuroLib/lib/asuro.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > asuro.d; \
[ -s asuro.d ] || rm -f asuro.d
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -IC:/ASURO_SRC/AsuroLib/lib/inc -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
[ -s test.d ] || rm -f test.d
-------- begin --------
avr-gcc --version
avr-gcc (WinAVR 20090313) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

avr-gcc -c -mmcu=atmega8 -I. -g -Os -IC:/ASURO_SRC/AsuroLib/lib/inc -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
avr-gcc -c -mmcu=atmega8 -I. -g -Os -IC:/ASURO_SRC/AsuroLib/lib/inc -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=C:/ASURO_SRC/AsuroLib/lib/asuro.lst C:/ASURO_SRC/AsuroLib/lib/asuro.c -o asuro.o
avr-gcc -mmcu=atmega8 -I. -g -Os -IC:/ASURO_SRC/AsuroLib/lib/inc -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.o test.o asuro.o --output test.elf -Wl,-Map=test.map,--cref -LC:/ASURO_SRC/AsuroLib/lib -lm -lasuro
c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr4/crtm8.o:(.init9+0x0): undefined reference to `main'
make: *** [test.elf] Error 1

> Process Exit Code: 2
> Time Taken: 00:01

Wäre wahnsinnig nett wenn mir da jemand was zu sagen könnte.

MfG Jurii

Valen
25.05.2009, 17:22
undefined reference to `main' Das ist schon ofter vorbei gekommen hier Im Asuro abteilung. Aber was dar fehlt geht mich uber den kopf.

Asurov
19.06.2010, 14:28
#include "asuro.h" // bitte die neue Datei benutzen
// asuro.h und asuro.c vom 31.03.05

#define aus MotorDir(BREAK,BREAK)
#define go {MotorSpeed(150,150);MotorDir(FWD,FWD);}
#define backturn { MotorSpeed(150,250);MotorDir(RWD,RWD);Msleep(1000) ;}

/************************************************** ***********************************

ASURO discovers your apartment

program made by stochri july, 2005

************************************************** ***********************************/

int speed()
{
int rightspeed,leftspeed;
int leftold,rightold;

Encoder_Set(0,0); // reset encoder


leftold=encoder[LEFT];
rightold=encoder[RIGHT];
Msleep(300);
leftspeed=encoder[LEFT]-leftold;
rightspeed=encoder[RIGHT]-rightold;

//SerWrite(" speed Left,Right ",19);
//PrintInt(leftspeed);
//PrintInt(rightspeed);
return leftspeed+rightspeed;
}

int main(void)
{
int n,v,nullspeed;

Init();
Encoder_Init();
StatusLED(OFF);
SerWrite("\n\rASURO OK\n\r",8);

go;
Msleep(500);

nullspeed=speed()-10;

while(1)
{
v=speed();
SerWrite("\n\r speed ",9);
PrintInt(v);

if(v<nullspeed)
{
backturn;
go;
Msleep(500);
}

}
return 0;
}


Das Ziel des Verfahrens war es, dem Asuro eine Art "Gefühl" beizubringen. Der Asuro merkt sozusagen, dass die Belastun seiner Motoren zu hoch wird und fährt dann in einer Kurve rückwärts.
Das Interessante an diesem Verfahren ist, dass der Asuro so durch die ganze Wohnung fahren kann, was bei einer Methode bei der nur die Tasten abgefragt werden, nicht funktioniert.[/quote]



Hallo! Ich bekomme folgenden Fehlermeldung beim erstellen der HEX file!


"-------- begin --------
avr-gcc --version
avr-gcc (GCC) 3.3.1
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

avr-gcc -c -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -I../../lib/inc -funsigned
-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes
-Wa,-ahlms=test.lst test.c -o test.o
avr-gcc -c -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -I../../lib/inc -funsigned
-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes
-Wa,-ahlms=../../lib/asuro.lst ../../lib/asuro.c -o asuro.o
avr-gcc -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -I../../lib/inc -funsigned-ch
ar -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -W
a,-ahlms=test.o test.o asuro.o --output test.elf -Wl,-Map=test.map,--cref -L..
/../lib -lm -lasuro
C:\WinAVR\bin\..\lib\gcc-lib\avr\3.3.1\..\..\..\..\avr\bin\ld.exe: BFD 2.14 2003
0612 + coff-avr-patch (20030831) internal error, aborting at ../../bfd/reloc.c l
ine 444 in bfd_get_reloc_size

C:\WinAVR\bin\..\lib\gcc-lib\avr\3.3.1\..\..\..\..\avr\bin\ld.exe: Please report
this bug.

make: *** [test.elf] Error 1"

Wenn ich die Methoden "EncoderInit, EncoderSet, EncoderStar, EncoderStop" funktioniert das HEX file erstellen?

Valen
19.06.2010, 14:39
Deine letzte frage verstehe ich nicht. Aber du benutzt eine alte version von den compiler (WinAVR 3.3.1). Versuch es mal mit ein spätere version:

http://sourceforge.net/projects/winavr/files/