Hallo Forum,
bin neu hier. Ich habe schon Grundkenntnisse mit ATTNY13 und ATMEGA88. Und ich programmiere in BASCOM, da es dem Visual Basic von Microsoft sehr ähnelt und ich mich damit beruflich arbeite. Zu meinem Problem habe ich schon diverse Foren durchstöbert, bin aber nicht fündig nach einer Lösung geworden. Deshalb hier meine Frage:
Ich arbeite an einem Projekt mit einem ATMEGA88. Dieser soll zwei RC-Kanäle an PCINT1 und PCINT2 auslesen. Die INT0/1 will und kann ich nicht nutzen, da ich Pin5(PD.3,INT1) und Pin4(PD.2, INT0) schon für andere Dinge nutze und ich das Leiterplattendesign schon fertig habe. Im Datenblatt habe ich einiges über Register gelesen, die ich aktivieren muss. Der Compiler meckert nicht, scheint also alles richtig zu sein. Wenn ich aber das Oszi an Pin15 (PCINT1) halte bekomme ich digitale Signale mit einem Pegel von 5V heraus. Einlesen von Signalen und Auslösen einer Interrupt-Routine, geschweige denn das Messen der Impulslänge von 1-2ms klappt nicht. Was mache ich falsch?
Code:
bin neu hier. Ich habe schon Grundkenntnisse mit ATTNY13 und ATMEGA88. Und ich programmiere in BASCOM, da es dem Visual Basic von Microsoft sehr ähnelt und ich mich damit beruflich arbeite. Zu meinem Problem habe ich schon diverse Foren durchstöbert, bin aber nicht fündig nach einer Lösung geworden. Deshalb hier meine Frage:
Ich arbeite an einem Projekt mit einem ATMEGA88. Dieser soll zwei RC-Kanäle an PCINT1 und PCINT2 auslesen. Die INT0/1 will und kann ich nicht nutzen, da ich Pin5(PD.3,INT1) und Pin4(PD.2, INT0) schon für andere Dinge nutze und ich das Leiterplattendesign schon fertig habe. Im Datenblatt habe ich einiges über Register gelesen, die ich aktivieren muss. Der Compiler meckert nicht, scheint also alles richtig zu sein. Wenn ich aber das Oszi an Pin15 (PCINT1) halte bekomme ich digitale Signale mit einem Pegel von 5V heraus. Einlesen von Signalen und Auslösen einer Interrupt-Routine, geschweige denn das Messen der Impulslänge von 1-2ms klappt nicht. Was mache ich falsch?
Code:
Code:
'Autosteuerung
$regfile = "m88def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 40
$framesize = 40
$prog &HFF , &HFF , &HDF , &HF9 ' generated. Take care that the chip supports all fuse bytes.
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 geht:"
'Load Timer1 , 32000
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