Zitat von
goara
das geht so:
Code:
$regfile = "m644def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 20000000
$baud = 9600
' ----- Empfänger -----
Dim Kanal_nick As Integer
Dim Kanal_roll As Integer
Dim Kanal_yaw As Integer
Dim Kanal_pitch As Integer
Dim Kanal_nick_check(3) As Integer
Dim Kanal_roll_check(3) As Integer
Dim Kanal_yaw_check(3) As Integer
Dim Kanal_pitch_check(3) As Integer
Dim Kanal_nick_init As Integer
Dim Kanal_roll_init As Integer
Dim Kanal_yaw_init As Integer
Dim Kanal_pitch_init As Integer
Dim Puls(8) As Integer
Dim Kanal As Byte
Dim Empfaenger_ok(4) As Byte
'-----------Interupts----------
On Icp1 Get_empfaenger Nosave ' ICP fuer Funke
On Ovf1 Kanal_reset Nosave
Config Timer1 = Timer , Prescale = 8 , Capture Edge = Falling
Enable Ovf1
Enable Icp1
Enable Interrupts
'...
'blablablabalbal... codecode
'...
'------------Interupts--------------- ' FUnke am ICP interrup
Get_empfaenger:
push r10
push r11
push r24
push r25
push r26
push r27
in r24,sreg
push r24
Puls(kanal) = Timer1
Timer1 = 40000
Incr Kanal
pop r24
!Out Sreg , R24
pop r27
pop r26
pop r25
pop r24
pop r11
pop r10
Return
Kanal_reset:
push r24
in r24,sreg
push r24
Kanal = 1
pop r24
!Out sreg,r24
pop r24
Return
End
Die Signale sind alle am anfang von dem Signal, das erste nach der langen Pause ist also kanal 1 usw...
Bild hier
[/code]
Hi Goara,
Habe dein Code mal in Bascom ausprobiert, aber er funktioniert nicht.
Summensignal ist am ICP angeschlossen (Empfänger = ACT DSL4top Typ: MK)
Hier mein Code:
Code:
'Einstellungen
$regfile = "m644pdef.dat" 'Atmega 644P
$crystal = 20000000 '20Mhz ext
$baud = 115200
$hwstack = 100
$swstack = 100
$framesize = 100
'ADC Einstellungen
Config Adc = Single , Prescaler = Auto , Reference = Aref 'Aref = 3V3
Start Adc
'Acc Nullwerte: Z = 611 ; Y = 497 ; X = 511 für ACC-Mode
'I2C Bus Einstellungen
Config Scl = Portc.0 'I2C Port SCL
Config Sda = Portc.1 'I2C Port SDA
I2cstart 'I2C Bus starten
'Serialport Einstellungen
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 254
Config Serialout = Buffered , Size = 254
'PPM Messung
Dim Kanal_nick As Integer
Dim Kanal_roll As Integer
Dim Kanal_yaw As Integer
Dim Kanal_pitch As Integer
Dim Kanal_nick_check(3) As Integer
Dim Kanal_roll_check(3) As Integer
Dim Kanal_yaw_check(3) As Integer
Dim Kanal_pitch_check(3) As Integer
Dim Kanal_nick_init As Integer
Dim Kanal_roll_init As Integer
Dim Kanal_yaw_init As Integer
Dim Kanal_pitch_init As Integer
Dim Puls(8) As Integer
Dim Kanal As Byte
Dim Empfaenger_ok(4) As Byte
On Icp1 Get_empfaenger Nosave ' ICP fuer Funke
On Ovf1 Kanal_reset Nosave
Config Timer1 = Timer , Prescale = 8 , Capture Edge = Falling
Enable Ovf1
Enable Icp1
'Interrupteinstellungen
Enable Interrupts 'Interrupts einschalten
Do
'Mainblablabla
Loop
'------------Interupts--------------- ' FUnke am ICP interrup
Get_empfaenger:
push r10
push r11
push r24
push r25
push r26
push r27
in r24,sreg
push r24
Puls(kanal) = Timer1
Timer1 = 40000
Incr Kanal
pop r24
!Out Sreg , R24
pop r27
pop r26
pop r25
pop r24
pop r11
pop r10
Return
Kanal_reset:
push r24
in r24,sreg
push r24
Kanal = 1
pop r24
!Out sreg,r24
pop r24
Return
'Ende des Programms#############################################################
End
Habe mir die Kanäle mit
Print Kanal_nick ; " Nick"
Print Kanal_yaw ; " Yaw"
Print Kanal_nick_init ; " Nick init"
Print Kanal ; " Kanal"
anzeigen lassen. Leider ist alles 0. Bis auf "Kanal" der wechselt.
Desweiteren habe ich auch versucht, den Timerpreloader auf 55536 anstatt 40000 zu stellen (um auf 4 ms zu kommen). Leider auch ohne erfolg.
Dann habe ich auch noch diesen Code hier ausprobiert:
http://www.rn-wissen.de/index.php/RC...nger_auswerten
und auf meine Werte angepasst (Timer1, Summensignal am INT1, Preloader usw.) auch ohne Erfolg.
Empfänger funktionier (Am Kanal1 hab ich das Summensignal, Am kanal2 hängt ein Servo)
Kann mir jemand vll weiter helfen?
Danke
Lesezeichen