Hallo an alle,
im Moment versuche ich, den Bootloader von Peter Dannegger aus diesem
Beitrag (Beitrag "Re: ATtiny45 Bootloader") mit
Infrarotverbindung zu verwenden.
Am µC sind eine IR-Diode (vom Pin nach Masse) und einen IR-Receiver (SFH
5110-36) angeschlossen (beide funktionieren ohne Bootloader gut), am PC
hängt der USB-IR-Adapter vom Asuro.
Um ein 36khz-Infrarotsignal zu erzeugen, habe ich in die TINYLOAD.INC
einen 72khz-Timer-Interrupt programmiert, der die Richtung des Sendepins
toggeln soll (Takt sind 8Mhz):
1 | .include "tinyload.h"
|
2 | .listmac
|
3 | .list
|
4 | .org 0x0000
|
5 | #ifdef USE_JMP
|
6 | jmp init
|
7 | #else
|
8 | rjmp init
|
9 | #endif
|
10 |
|
11 | .org OC0Aaddr
|
12 | TIMER0_COMPA_vect:
|
13 | in R16, STX_DDR ; Daten lesen
|
14 | ldi R17, (1<<STX) ; Bitmaske laden, hier Bit #2
|
15 | eor R16, R17 ; Exklusiv ODER
|
16 | out STX_DDR, R16 ; Daten zurückschreiben
|
17 | reti
|
18 |
|
19 | .org BootStart
|
20 | init:
|
21 | cli
|
22 | ldi a0, low (RamEnd)
|
23 | out SPL, a0
|
24 | #ifdef USE_SPH
|
25 | ldi a0, high(RamEnd)
|
26 | out SPH, a0
|
27 | #endif
|
28 | clr zerol
|
29 | clr zeroh
|
30 | clr Flags
|
31 | sbi SRX_PORT, SRX
|
32 | sbi STX_PORT, STX
|
33 | sbi STX_DDR, STX
|
34 |
|
35 | in r16, TCCR0A ;freies register benutzen
|
36 | ori r16, (1<<WGM01) ;rein ins register, verändern und raus
|
37 | out TCCR0A, r16
|
38 |
|
39 | in r16, TCCR0B ;freies register benutzen
|
40 | ori r16, (1<<CS00) ;rein ins register, verändern und raus
|
41 | out TCCR0B, r16
|
42 |
|
43 | ldi r16, 0x6E
|
44 | out OCR0A, r16
|
45 |
|
46 | in r16, TIMSK ;freies register benutzen
|
47 | ori r16, (1<<OCIE0A) ;rein ins register, verändern und raus
|
48 | out TIMSK, r16
|
49 | sei
|
50 |
|
51 | ;-------------------------------------------------------------------------
|
52 | .include "abaud.inc"
|
53 | ;...
|
54 | ;... usw.
|
55 | ;...
|
Die Infrarotdiode leuchtet dauerhaft (ob mit 36khz weiß ich nicht, am PC
kommt kein Signal an), ein Programm kann ich über den Bootloader nicht
übertragen. ("Waiting for device...")
Hab ich soweit richtig programmiert? Woran kann es liegen, dass die
Übertragung nicht funktioniert? Muss evtl. noch ein Signal invertiert
werden?
Viele Grüße,
Electricsheep