Hallo an das Forum,
bin neu hier und komme bei der Programmierung eines ATMEGA88 nicht weiter.
Ich möchte an Pin 15 u. 16 die Signale eines RC-Empfängers in einer ISR einlesen lassen und diese dann im Hauptprogramm weiterverarbeiten. Die INT0/1 pins habe ich schon mit anderen Dingen belegt, so dass ich auf die PCINT1/2 zurückgreifen muss.
In meinen Büchern und im Internet habe ich noch nicht die passenden Passagen gefunden, die mir bei meinem Problem weiterhelfen würden.
Code:
'Autosteuerung
$regfile = "m88def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 40
$framesize = 40
Dim I As Integer
On Timer1 Fehler
Config Portc.3 = Output
Config Pinb.1 = Input
Sreg.7 = 1 'Globale Interrupts einschalten
Pcicr.0 = 1 'PCInterrupt einschalten
Pcifr.0 = 1
Pcmsk0 = &B00000010 'Einschalten pcint1
Pinb.1 = 0
On Pcint1 Lesen
Config Timer1 = Counter , Prescale = 1 , Compare A = Toggle , Clear Timer = 1
Enable Timer1
Enable Interrupts
'Display Einrichten
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portd.7 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2
Cursor Off
Cls
Upperline : Lcd " Los gehts:"
Do
Lowerline : Lcd " Puls: " ; I ; " ms "
Toggle Portc.3
Loop
Lesen:
If Pinb.1 = 1 Then
Pulsein I , Pinb , 1 , 1
End If
Return
Fehler:
Timer1 = 0
Return
end
Nun zu meinen Fragen:
- Was mache ich falsch, denn die ISR scheint nicht zu starten?
- Wie messe ich mit dem TIMER1 die genaue Länge der Signale um sie dann für Berechnungen weiter zu verwenden?
- Ich möchte weg von den Assembler-ähnlichen Eingaben, weil ich sie nicht verstehe. Im Datenblatt stehen nur Beispiele für C und Assembler. Wie muss der Code für Bascom aussehen, dass das richtig funktioniert?
Lesezeichen