|
Thema: Universeller RC5-Fernbedienungsempfänger
|
| Autor |
Beitrag |
|
TarAx
16 Beiträge
 Neuer Benutzer
|
13-12-2011 00:02
Hallo liebe Elektor Elektroniker,
hat jeman schon "Universeller RC5-Fernbedienungsempfänger" von Elektor gebaut?
Link:
http://www.elektor.de/jahrgang/2001/juli/universeller-rc5-fernbedienungsempfanger.59603.lynkx
Meine Schaltung mit ATtiny45, statt mit ATtiny22,
irgenwie funktioniert nicht.
Kann mir jemand helfen?
Ich werde für jede Hilfe sehr dankbar sein!
Mit freundlichem Gruß
Axel
|
|
TarAx
16 Beiträge
 Neuer Benutzer
|
14-12-2011 09:59
Hallo nochmals,
ich melde mich hier zum ersten mal und ich hoffe das mir jemand helfen kann.
Ich bin euch im Voraus dankbar.
Mit freundlichem Gruß
Axel
|
|
wkrug
340 Beiträge
 Erfahrener Benutzer
|
14-12-2011 19:44
Wenn Du einen anderen Controller als den eigentich vorgesehenen verwenden willst, musst du zumindest den Chip include im Quelltext ändern und das Programm neu compilieren.
Dann sind die entsprechenden Fuses im Controller eventuell anzupassen und vermutlich auch ein paar Registernamen zu ändern.
Wenn Du das alles gemacht hast kannst Du die entstandene .hex Datei, eventuell auch die .eep Datei in den Chip proggen und es sollte laufen. Chance etwa 50:50%.
Ich hab die Schaltung leider nicht aufgebaut und kann Dir deshalb auch hier nicht viel weiterhelfen.
Schreib mal etwas konkreter, wo die Probleme liegen, dann wird Dir hier auch sicher geholfen.
|
|
Thomas Scherer
834 Beiträge
 Elektor-Experte
|
14-12-2011 22:52
die Versionen 22 und 45 unterscheiden sich in mehr als nur der Flash-Größe. Du musst mal schauen, ob diese Unterschiede dann einen Funktion beeinträchtigen. Datenblattstudium ist da angesagt.
Beitrag editiert von Thomas Scherer
am 14-12-2011 22:53
|
|
TarAx
16 Beiträge
 Neuer Benutzer
|
14-12-2011 23:25
Hallo wkrug,
ich danke dir sehr.
Vor allem möchte ich klarstellen, dass ich ein blutiger Anfänger bin und ich werde euch allen sehr dankbar sein für die jede kleinste Hilfe.
Ich bin ein "Melitta-Mischung", Holländer/Kroate, und spreche ein bisschen Deutsch. (Sorry wegen grammatischen Fehlern!)
Vom Beruf bin ich Elektroniker für Automatisierungstechnik, Siemens Sxxx, WinFACTxxx usw., mit BASCOM bin ich "dabei", d.h., ganz ohne Grundlagen, bin ich nicht,
+ und - Pol, kenne ich schon
Ich möchte gerne für mich ein
Universeller IR-Fernbedienungsempfänger
bauen. Dieses Projekt von Elektor hat mir sehr gefallen.
Problem:
1. ATtiny22L wird nicht mehr produziert,
aus dem Grund habe ich mich entschieden für ATtiny45.
Die beiden haben, laut dem Datenblatt, "gleiche" Pinbelegung,
nur andere Geschwindigkeit, 45-ger hat 0-20 MHz.
ATtiny45 habe ich extra ausgewählt wegen größeren Speichers.
(Ich wollte später noch mit NEC-Code "basteln").
2. Programmieren hat gut geklappt,
Test fase auf dem Steckbrett nicht.
a. Im Programmiermodus, muss ich eine Taste sehr lange auf
der FB drücken um den gewünschten RC5-Code auf dem
Empfänger im EEPROM zu speichern.
(Die Diode am PBO->off)
b. Im Normalbetrieb, muss ich eben so lange die ausgewählte
Taste betätigen bis zum (am PBO) die Diode ausgeht.
c. Weiter tut sich nichts mehr.
Ich muss Spannung unterbrechen, dann kann ich die Diode
wieder ausmachen, aber nicht mehr anmachen
Muss der Quelltext nur angepasst werden oder auch Hardware!?!!?
DANKE IM VORAUS!
Mit freundlichem Gruß
Axel
|
|
TarAx
16 Beiträge
 Neuer Benutzer
|
14-12-2011 23:31
Hallo Thomas Scherer,
danke dir sehr, das ist ein guter Hinweis.
Ich habe schon alles gut nachgeguckt, aber ich bin zu keinem Ergebniss gekommen
Ich studiere weiter, danke vielmals.
Mit freundlichem Gruß
Axel
|
|
TarAx
16 Beiträge
 Neuer Benutzer
|
14-12-2011 23:51
Hier ist noch "etwas" geänderter Quelltext, nur ATtiny45.
Muss ich auch Frequenz ändern?
-------------------------------------------------------------------------------
;**** T I T L E R C 5 T I N Y L A M P ***************************************
;*
;* Title :RC5TinyLamp
;* Version :1.0
;* Date :00.05.31
;* Last updated :00.08.19
;* Target :ATTiny45
;* Crystal frequency :1Mhz intern oscillator
;*
;* Support :J.v.Boxtel
;* Support E-mail :boxteldoelen@hetnet.nl
;*
;* Code Size :149 words
;* Low Register Usage :5
;* High Register Usage :11
;* Interrupt Usage :
;* Based on :avr410 rc5, avr100 EEprom access, RC5Lamp
;*
;* DESCRIPTION
;* This Application switch a lamp on/off with RC5 if
;* system and lamp_nr are correct
;* system and lamp_nr are can be change with the "learn_button"
;* pB2 (pin7) is IRinput, pB3 (pin2) is learn button, pB0 (pin5) is output
;* pB3 learbutton open=normal groud=learn
;* pB1 (pin6) ext interrupt
;***************************************************************************
.include "tn22def.inc"
.equ INPUT =2 ;PB2 input for ir reciever
.def S =R0 ;Storage for the Status Register
.def inttemp =R1 ;Temporary variable for ISR
.def ref1 =R2 ;Reference for timing
.def ref2 =R3 ;Reference for timing
.def EEdrd =R4 ;read data byte from EEprom
.def temp =R16 ;Temporary variable
.def timerL =R17 ;Timing variable updated every 14 us
.def timerH =R18 ;Timing variable updated every 16 ms
.def system =R19 ;Address data received
.def command =R20 ;Command received
.def bitcnt =R21 ;Counter
.def SYS_ADDR =R22 ;Systen addres to respond on
.def LAMP_NR =R23 ;Lamp number to respond on
.def EEard =R24 ;address to read from
.def EEdwr =R25 ;data byte to write to EEPROM
.def EEawr =R26 ;address byte to write to
.cseg
.org 0
rjmp reset
;********************************************************************
;* "TIM0_OVF" - Timer/counter overflow interrupt handler
;*
;* The overflow interrupt increments the "timerL" and "timerH"
;* every 64us and 16,384us.
;*
;* Crystal Frequency is 1 MHz
;*
;* Number of words:
;* Number of cycles:6 + reti
;* Low registers used:1
;* High registers used: 3
;* Pointers used:0
;********************************************************************
.org OVF0addr
TIM0_OVF:
in S,sreg ; Store SREG
inc timerL ; Updated every 64us
inc inttemp ; 4 MHz clock
inc timerL ; Updated every 64us
inc inttemp ; 3 MHz clock
inc timerL ; Updated every 64us
inc inttemp ; 2 MHz clock
inc timerL ; Updated every 64us
inc inttemp ; 1 MHz clock
brne TIM0_OVF_exit
inc timerH ; if 256th int inc timer
TIM0_OVF_exit:
out sreg,S ; Restore SREG
reti
reset:
ldi temp,1 ;Timer/Counter 0 clocked at CK
out TCCR0,temp ; Timer counter 0 prescaler
ldi temp,1 3/4 bit time
brge fault ;exit
sbic PINB,INPUT ;Wait for falling edge start bit 2
rjmp start3
clr timerL
ldi bitcnt,12 ;Receive 12 bits
clr command
clr system
sample:
cp timerL,ref1 ;Sample INPUT at 1/4 bit time
brlo sample
sbic PINB,INPUT
rjmp bit_is_a_1 ;Jump if line high
bit_is_a_0:
clc ;Store a ’0’
rol command
rol system
;Synchronize timing
bit_is_a_0a:
cp timerL,ref2 ;If no edge within 3/4 bit time
brge fault ;exit
sbis PINB,INPUT ;Wait for rising edge
rjmp bit_is_a_0a ;in the middle of the bit
clr timerL
rjmp nextbit
bit_is_a_1:
sec ;Store a ’1’
rol command
rol system
;Synchronize timing
bit_is_a_1a:
cp timerL,ref2 ;If no edge within 3/4 bit time
brge fault ;exit
sbic PINB,INPUT ;Wait for falling edge
rjmp bit_is_a_1a ;in the middle of the bit.
clr timerL
nextbit:
dec bitcnt ;If bitcnt > 0
brne sample ;get next bit
;All bits sucessfully received!
mov temp,command ;Place system bits in "system"
rol temp
rol system
rol temp
rol system
andi command,0b01111111
andi system,0x1F
ret
fault:
ser command ;Both "command" and "system"
ser system ;0xFF indicates failure
ret
.eseg
.org 0
table:
.db $00,$04 ;KTV1, button 4 default settings
--------------------------------------------------------------------------
Danke sehr im Voraus!
|
|
wkrug
340 Beiträge
 Erfahrener Benutzer
|
15-12-2011 15:36
Da fehlt mir auf den ersten Blick so einiges!
1. Die Include Datei ist falsch:
.include "tn45def.inc"
2. Die Interrupt Vektor Tabelle würde ich als komplettes aus dem Datenblatt übernehmen und die nicht benötigten Adressen mit RETI deaktivieren:
.cseg
.org 0
rjmp RESET ; Reset Handler
RETI; rjmp EXT_INT0 ; IRQ0 Handler
RETI; rjmp PCINT0 ; PCINT0 Handler
RETI; rjmp TIM1_COMPA ; Timer1 CompareA Handler
RETI; rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
RETI; rjmp EE_RDY ; EEPROM Ready Handler
RETI; rjmp ANA_COMP ; Analog Comparator Handler
RETI; rjmp ADC ; ADC Conversion Handler
RETI; rjmp TIM1_COMPB ; Timer1 CompareB Handler
Ich hab die Vektoren mal drin gelassen und mit ";" auskommentiert!
3. Der Stack muß am Anfang der Reset Hauptroutine initialisiert werden, da der 45er RAM hat:
LDI temp,low(ramend)
OUT SPL,temp
LDI temp,high(ramend)
OUT SPH,temp
SEI ; Globale Interrupts freigeben.
SEI hab ich mal eingefügt, oder darf der Controller keine Interrupts ausführen?
4. Den TIM0_OFV Handler würde ich nach dem Hauptprogramm ansiedeln, da der Platz wo sie jetzt ist eigentlich durch die Interrupt Vektoren belegt ist.
Dann müssen vermutlich noch ein Paar Register Namen geändert werden und dann sollte es funzen.
Du musst die neu generierte .hex und die .eep Datei in den Controller flashen, weil Du ja am Ende eine Tabelle mit EEPROM Werten generiert hast:
.eseg
.org 0
table:
.db $00,$04 ;KTV1, button 4 default settings
Den Fuses musst Du auch noch Aufmerksamkeit schenken, aber ohne Schaltplan kann ich Dir da keine Empfehlungen geben.
Dein angegebener Code ist mit Sicherheit nicht komplett.
Der Assembler mosert zurecht bei:
ldi temp,1 3/4 bit time
rjmp start3 ; Label nicht vorhanden!
out TCCR0,temp ; Timer counter 0 prescaler - gibts nicht beim 45er sonder TCCR0A und TCCR0B
Zudem springt dein Programm bei einem RET imme wieder zum Reset Vektor - Ist das so beabsichtigt?
Ich kann Dir nicht versprechen, ob das nun alles war, aber es ist schon mal ein Anfang.
Beitrag editiert von wkrug
am 15-12-2011 15:56 Beitrag editiert von wkrug
am 15-12-2011 15:59
|
|
wkrug
340 Beiträge
 Erfahrener Benutzer
|
15-12-2011 16:38
Probier mal, ob's das Programm tut.
;**** T I T L E R C 5 T I N Y L A M P ***************************************
;*
;* Title :RC5TinyLamp
;* Version :1.0
;* Date :00.05.31
;* Last updated :00.08.19
;* Target :ATTiny22
;* Crystal frequency :1Mhz intern oscillator
;*
;* Support :J.v.Boxtel
;* Support E-mail :boxteldoelen@hetnet.nl
;*
;* Code Size :149 words
;* Low Register Usage :5
;* High Register Usage :11
;* Interrupt Usage :
;* Based on :avr410 rc5, avr100 EEprom access, RC5Lamp
;*
;* DESCRIPTION
;* This Application switch a lamp on/off with RC5 if
;* system and lamp_nr are correct
;* system and lamp_nr are can be change with the "learn_button"
;* pB2 (pin7) is IRinput, pB3 (pin2) is learn button, pB0 (pin5) is output
;* pB3 learbutton open=normal groud=learn
;* pB1 (pin6) ext interrupt
;***************************************************************************
.include "tn45def.inc"
.equ INPUT =2 ;PB2 input for ir reciever
.def S =R0 ;Storage for the Status Register
.def inttemp =R1 ;Temporary variable for ISR
.def ref1 =R2 ;Reference for timing
.def ref2 =R3 ;Reference for timing
.def EEdrd =R4 ;read data byte from EEprom
.def temp =R16 ;Temporary variable
.def timerL =R17 ;Timing variable updated every 14 us
.def timerH =R18 ;Timing variable updated every 16 ms
.def system =R19 ;Address data received
.def command =R20 ;Command received
.def bitcnt =R21 ;Counter
.def SYS_ADDR =R22 ;Systen addres to respond on
.def LAMP_NR =R23 ;Lamp number to respond on
.def EEard =R24 ;address to read from
.def EEdwr =R25 ;data byte to write to EEPROM
.def EEawr =R26 ;address byte to write to
.cseg
.org 0
rjmp RESET ; Reset Handler
RETI; rjmp EXT_INT0 ; IRQ0 Handler
RETI; rjmp PCINT0 ; PCINT0 Handler
RETI; rjmp TIM1_COMPA ; Timer1 CompareA Handler
RETI; rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
RETI; rjmp EE_RDY ; EEPROM Ready Handler
RETI; rjmp ANA_COMP ; Analog Comparator Handler
RETI; rjmp ADC ; ADC Conversion Handler
RETI; rjmp TIM1_COMPB ; Timer1 CompareB Handler
;********************************************************************
;* "TIM0_OVF" - Timer/counter overflow interrupt handler
;*
;* The overflow interrupt increments the "timerL" and "timerH"
;* every 64us and 16,384us.
;*
;* Crystal Frequency is 1 MHz
;*
;* Number of words:
;* Number of cycles:6 + reti
;* Low registers used:1
;* High registers used: 3
;* Pointers used:0
;********************************************************************
TIM0_OVF:
in S,sreg ; Store SREG
inc timerL ; Updated every 64us
inc inttemp ; 4 MHz clock
inc timerL ; Updated every 64us
inc inttemp ; 3 MHz clock
inc timerL ; Updated every 64us
inc inttemp ; 2 MHz clock
inc timerL ; Updated every 64us
inc inttemp ; 1 MHz clock
brne TIM0_OVF_exit
inc timerH ; if 256th int inc timer
TIM0_OVF_exit:
out sreg,S ; Restore SREG
reti
reset:
LDI temp,low(ramend) ;Init Stack Pointer
OUT SPL,temp
LDI temp,high(ramend)
OUT SPH,temp
ldi temp,1 ;Timer/Counter 0 clocked at CK
out TCCR0B,temp ; Timer counter 0 prescaler
ldi temp,1 3/4 bit time
brge fault ;exit
sbic PINB,INPUT ;Wait for falling edge start bit 2
rjmp start3
clr timerL
ldi bitcnt,12 ;Receive 12 bits
clr command
clr system
sample:
cp timerL,ref1 ;Sample INPUT at 1/4 bit time
brlo sample
sbic PINB,INPUT
rjmp bit_is_a_1 ;Jump if line high
bit_is_a_0:
clc ;Store a ’0’
rol command
rol system
;Synchronize timing
bit_is_a_0a:
cp timerL,ref2 ;If no edge within 3/4 bit time
brge fault ;exit
sbis PINB,INPUT ;Wait for rising edge
rjmp bit_is_a_0a ;in the middle of the bit
clr timerL
rjmp nextbit
bit_is_a_1:
sec ;Store a ’1’
rol command
rol system
;Synchronize timing
bit_is_a_1a:
cp timerL,ref2 ;If no edge within 3/4 bit time
brge fault ;exit
sbic PINB,INPUT ;Wait for falling edge
rjmp bit_is_a_1a ;in the middle of the bit.
clr timerL
nextbit:
dec bitcnt ;If bitcnt > 0
brne sample ;get next bit
;All bits sucessfully received!
mov temp,command ;Place system bits in "system"
rol temp
rol system
rol temp
rol system
andi command,0b01111111
andi system,0x1F
ret
fault:
ser command ;Both "command" and "system"
ser system ;0xFF indicates failure
ret
.eseg
.org 0
table:
.db $00,$04 ;KTV1, button 4 default settings
Die Fuses sind auf 1MHz interner oszillator gestellt, ich meine das ist die default Einstellung, aber guck mal in's Datenblatt.
Leider haut das Elektor Forum die Hälfte des Quellcodes raus, ich guck mal, ob ich's als PN zu Dir rüber krieg.
In der Editoransicht ist der komplette Quellcode vorhanden!!!
Beitrag editiert von wkrug
am 15-12-2011 16:40 Beitrag editiert von wkrug
am 15-12-2011 16:44 Beitrag editiert von wkrug
am 15-12-2011 16:47 Beitrag editiert von wkrug
am 15-12-2011 16:48
|
|
TarAx
16 Beiträge
 Neuer Benutzer
|
16-12-2011 11:31
WOOOOW!!!
wkrug, du bist echt große Klasse!
Nach dem Arbeit probiere ich alles sofort!
Erstmal, RIESEN DANK für deine Zeit und deine Mühe.
Ich schulde dir was, auf jedem Fall!
(Ich berichte weiter.)
LG
Axel
|
|
Feedback zu Elektor
Folgen Sie Elektor auf...
|