Hallo
Ich dachte immer, basic würde ich nie mehr verwenden.*grins* Aber es kommt eben immer anders als man denkt.
Ich hab' mich nun auf die Schnelle im RN-Wissen zum Thema Bascom etwas eingelesen, aber bitte keine Wunder erwarten:
Code:
'RC5-Code senden mit ATtiny13 11.12.2007'
$regfile = "ATtiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 8
$framesize = 16
Dim A As Integer
Config Portb.3 = Output 'beide Pins als Ausgang'
Config Portb.4 = Output 'nur wenn Portb.3=1 und Portb.4=0 leuchtet LED'
Config Timer0 = Timer , Prescale = 1 '9600kHz/76kHz gibt 126,31'
On Timer0 Timer_ISR
Timer0 = 256 - 126 'Timer mit Startwert für 76kHz laden'
Enable Timer0
Enable Interrupts
Timer_ISR: 'Interruptroutine'
Toggle Portb.4 'Pin umschalten'
Return
A = 0.889 'halbe Bitlänge RC5'
Do
Portb.3 = 0 'bit1'
Waitms A
Portb.3 = 1
Waitms A
Portb.3 = 0 'bit2'
Waitms A
Portb.3 = 1
Waitms A
Portb.3 = 1 'bit3'
Waitms A
Portb.3 = 0
Waitms A
Portb.3 = 1 'bit4'
Waitms A
Portb.3 = 0
Waitms A
Portb.3 = 1 'bit5'
Waitms A
Portb.3 = 0
Waitms A
Portb.3 = 1 'bit6'
Waitms A
Portb.3 = 0
Waitms A
Portb.3 = 1 'bit7'
Waitms A
Portb.3 = 0
Waitms A
Portb.3 = 1 'bit8'
Waitms A
Portb.3 = 0
Waitms A
Portb.3 = 1 'bit9'
Waitms A
Portb.3 = 0
Waitms A
Portb.3 = 1 'bit10'
Waitms A
Portb.3 = 0
Waitms A
Portb.3 = 1 'bit11'
Waitms A
Portb.3 = 0
Waitms A
Portb.3 = 1 'bit12'
Waitms A
Portb.3 = 0
Waitms A
Portb.3 = 1 'bit13'
Waitms A
Portb.3 = 0
Waitms A
Portb.3 = 0 'bit14'
Waitms A
Portb.3 = 1
Waitms A
Loop
Quellcode sollte man immer in code-Tags posten.
Wichtigste Änderung ist, dass die ISR (Interruptserviceroutine) nun nicht mehr das gesamte Programm beinhaltet.
Zum Timer:
Der Timer zählt vom Startwert bis zum Überlauf (8Bit=255 beim tiny13), erzeugt dann einen Interrupt und wird wieder mit dem Startwert geladen. In der ISR wird der Portb.4 mit dem Toggle (ist scheinbar ein bascom-Befehl) umgeschaltet. Es gibt aber scheinbar auch die PWM-Anwendung mit "Config Timer0 = Pwm...". Deshalb vermute ich, dass es auch eine CTC-Variante dazu gibt. Die wäre für unsere Anwendung optimal geeignet.
Hauptprogramm:
Hier werden dann die RC5-Bits an Portb.3 ausgegeben. Damit das funktioniert muss die LED (Widerstand nicht vergessen!) zwischen Portb.3 und Portb.4 angeschlossen sein. Wenn Portb.3=0(0V) ist, spielt der Pegel an Portb.4 keine Rolle. Wenn Portb.3=1(5V) ist, leuchtet die LED wenn Portb.4=0 ist, bei Portb.4=1(5V) ist sie dann aus. Ob die Bitfolge passt, habe ich noch nicht überprüft. Am Ende der Hauptschleife sollte man vielleicht vor der Wiederholung noch ein längeres Wait einfügen.
Ich habe keine Ahnung, ob das Programm so übersetzbar ist, ob es funktioniert weiß ich natürlich auch nicht.
Sehr wichtig ist (ich muss es einfach nochmal ansprechen, weil ich immer noch keine Aussage dazu habe), dass der interne Taktteiler in den Fuses ausgeschaltet ist und der tiny13 wirklich mit 9,6MHz läuft. Möglicherweise muss man noch den Timerstartwert anpassen um die Ungenauigkeiten des internen Taktgebers auszugleichen. Ob die Wait-Funktion von Bascom überhaupt so verwendet werden kann, kann ich auch nicht sagen. So wie im Moment wird es auf jeden Fall nicht funktionieren, denn A ist als Integer festgelegt...
Gruß
mic
Lesezeichen