PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Code läuft nicht feherfrei, bitte um Hilfe! Input Capture und UART nicht gleichzeitig



Accenter
02.06.2013, 19:52
Ich habe Probleme über den Input Capture ICP einen Funkempfänger auszuwerten und mir das Ergebnis über den UART ausgeben zu lassen.
Gleichzeitig möchte ich alles was am UART über ein Terminal reinkommt auch 1:1 wieder ausgeben.

Einzeln klappt sowohl die Ausgabe des Funkmoduls so wie auch die Rückgabe von am Terminal eingegeben "Texten". Mein Funkempfänger am Input Capture spuckt mir die richtigen Werte über Print #2 aus und auch der UART sendet alle Eingaben vom Terminal 1:1 korrekt zurück. Ich bekomme es nur NICHT gleichzeitig zum laufen!

Sobald ich aus der Hauptschleife "Gosub Empfang868mhz" rausnehme bekomme ich alle Terminal Eingaben korrekt zurück.
Füge ich es wieder ein, empfange ich nur noch die Funkbefehle vom Input Capture und das Terminal sendet nach Eingabe von Enter ins leere (ich bekomme dann die Eingabe bei "Print #2, Uart2eingang" nicht mehr zurück und weiß nicht warum.

Woran kann das liegen? Verträgt sich der Input Capture mit dem UART aus irgend einem Grund nicht? Manchmal wird mir nach der Ausgabe des Funkempfanges ein zuvor eingegebener Text über das Terminal sehrwohl mit ausgegeben (aber selten und auch nur zufällig leider). Bin am Ende meiner Weisheit und bitte um Hilfe. Hab den Code stark reduziert und nur die relevanten Teile gepostet.




$regfile = "m128def.dat"
$crystal = 8000000
$baud = 9600
$framesize = 550
$swstack = 550
$hwstack = 550




Config Pind.4 = Input '868Mhz Input, direkt vom Empfänger.
Config Portd.5 = Output 'Enable 868Mhz Empfänger'
Config Porte.7 = Output 'led gelb led1'
Config Porte.6 = Output 'led grün led2'
Config Porte.5 = Output 'led rot led3'
Config Porte.4 = Output 'led blau led4'
Config Porta.0 = Output '433Mhz Sender'
Config Portb.7 = Output '868Mhz sender'
Config Portb.6 = Output 'Enable 868Mhz Sender'
Config Portb.5 = Output 'Speaker'
Config Portc.7 = Output 'LAN Modul Reset'
Config Portd.6 = Output 'LAN Modul Config'


Funkpinit Alias Porta.0 '433Mhz Sender'
Funkpinfs20 Alias Portb.7 '868Mhz Sender'
Enablefs20tx Alias Portb.6 '868Mhz Sendefreigabe Enable'
Enablefs20rx Alias Portd.5 '868Mhz Empfängerfreigabe Enable'
Icp1 Alias Pind.4 '868Mhz Input, direkt vom Empfänger.
Led Alias Porte.7 'gelbe LED'
Ledgruen Alias Porte.6 'grüne LED'
Ledrot Alias Porte.5 'rote LED'
Ledblau Alias Porte.4 'blaue LED'
Speaker Alias Portb.5 'Piezo'
Lanreset Alias Portc.7 'LAN Modul Reset'
Lanconfig Alias Portd.6 'LAN Modul Config'


Config Sda = Portd.1 'DS1307'
Config Scl = Portd.0
I2cinit
Config Twi = 100000
Waitms 100
Dim Ds1307w As Byte , Ds1307r As Byte : Ds1307w = &B11010000 : Ds1307r = &B11010001


Config Com2 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin1 = Buffered , Size = 150
Config Serialout1 = Buffered , Size = 150
Open "Com2:" For Binary As #2 'UART 2 wird aktiviert. Schicken mit Print #2 , "text"'
Clear Serialin1
Enable Interrupts
Waitms 100


Dim Buffer As Byte , Uart2eingang As String * 152


Dim _weekday As Integer
Dim _wochentag As String * 2 , _day As Byte , _month As Byte , _monat As String * 3 , _year As Byte , _sec As Integer , _min As Integer , _hour As Integer
Dim Sec_str As String * 2 , Min_str As String * 2 , Hour_str As String * 2 , Day_str As String * 2 , Year_str As String * 2 'Variablen für mehrtsellige Ausgabe'






'Timer1: resolution = 1ms
Config Timer1 = Timer , Prescale = 8 , Capture Edge = Rising 'bei 8Mhz Quarz'
Timer1 = 0


On Icp1 Icp_int 'Input Capture an dem das 868Mhz Funkmodul betrieben wird'
Enable Icp1


Wait 3 'Wartezeit bis LAN Modul bereit ist'




Print #2 , "Programm start"
Waitms 200
Gosub Speakersound
Waitms 200
Gosub Speakersound




'##################### Hauptschleife #######################'


Hauptschleife:
Do
If Ischarwaiting(#2) = 1 Then 'Wenn über den UART2 was reinkommt springe zur UART Auswertung'
Gosub Uart2auswertung
End If
Gosub Empfang868mhz 'Gehe zum 868Mhz Funkempfang'
Loop


'############## UART Auswertung ###############'


Uart2auswertung: 'Zeichen werden zusammengesetzt und bei 13 ausgewertet'
Disable Interrupts
Buffer = Inkey(#2)
If Buffer >= 13 Then
If Buffer = 13 Then
Gosub Auswertung
Else
If Len(uart2eingang) < 149 Then
Uart2eingang = Uart2eingang + Chr(buffer)
Else
Uart2eingang = ""
Clear Serialin1
End If
End If
End If
Enable Interrupts
Return


Auswertung:
Print #2 , Uart2eingang 'Gebe alles 1:1 aus was am UART reingekommen ist zum Test'
Gosub Uhrzeitlesen
Print #2 , Hour_str ; ":" ; Min_str ; ":" ; Sec_str 'Zeitstempel ebenso ausgeben'
Uart2eingang = ""
Clear Serialin1
Return


'#################### Input Capture 868Mhz Empfänger #############################'


Icp_int:
Fs20cycle1 = Timer1
Timer1 = 0
Select Case Fs20cycle1
Case Is < 599 'below 600µs, reset bitcounter
Count1 = 1
Case 600 To 1000 '600-1000µs, 0-bit
Rxbit1 = 0
Rdy1 = 1
Case 1001 To 1400 '1000-1400µs, 1-bit
Rxbit1 = 1
Rdy1 = 1
Case Is > 1401 'over 1400µs, reset bitcounter
Count1 = 1
End Select
Return


'#################### Funk Empfang 868Mhz #############################'


Empfang868mhz:
'Hier findet die Auswertung vom Input Capture ICP1 statt und wird der Variablen "Gesamtcode" übergeben'
'Der Code ist umfangreich, mehrfach getestet und funktioniert. Habe ihn entfernt damit der Code fürs Forum nicht zu Umfangreich wird'


Gosub Speakersound
Print #2 , Gesamtcode1 'Alles was über 868Mhz empfangen wird, wird hier ausgegeben zum Test'
Waitms 100
Return






'##################################### DS1307 ######################################'


Datumschreiben:
_day = 31 : _month = 05 : _year = 13
Uhrzeitschreiben:
_sec = 00 : _min = 13 : _hour = 23
Gosub Uhrumrechnung
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour) : _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart : I2cwbyte Ds1307w : I2cwbyte 0 : I2cwbyte _sec : I2cwbyte _min : I2cwbyte _hour : I2cstop : I2cstart : I2cwbyte Ds1307w
I2cwbyte 3 : I2cwbyte _weekday : I2cwbyte _day : I2cwbyte _month : I2cwbyte _year : I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) : _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return


Uhrzeitlesen: 'Lese Zeit und Datum aus dem DS1307'
I2cstart
I2cwbyte Ds1307w : I2cwbyte 0 : I2cstop : I2cstart : I2cwbyte Ds1307r : I2crbyte _sec , Ack : I2crbyte _min , Ack : I2crbyte _hour , Ack
I2crbyte _weekday , Ack : I2crbyte _day , Ack : I2crbyte _month , Ack : I2crbyte _year , Nack : I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) : _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Gosub Uhrumrechnung
Return


Uhrumrechnung:
Select Case _weekday
Case Is = 1 : _wochentag = "Mo"
Case Is = 2 : _wochentag = "Di"
Case Is = 3 : _wochentag = "Mi"
Case Is = 4 : _wochentag = "Do"
Case Is = 5 : _wochentag = "Fr"
Case Is = 6 : _wochentag = "Sa"
Case Is = 7 : _wochentag = "So"
End Select
Select Case _month
Case Is = 1 : _monat = "Jan"
Case Is = 2 : _monat = "Feb"
Case Is = 3 : _monat = "Mar"
Case Is = 4 : _monat = "Apr"
Case Is = 5 : _monat = "Mai"
Case Is = 6 : _monat = "Jun"
Case Is = 7 : _monat = "Jul"
Case Is = 8 : _monat = "Aug"
Case Is = 9 : _monat = "Sep"
Case Is = 10 : _monat = "Okt"
Case Is = 11 : _monat = "Nov"
Case Is = 12 : _monat = "Dez"
End Select
Sec_str = Str(_sec) '2-stellig'
Sec_str = Format(sec_str , "00")
Min_str = Str(_min)
Min_str = Format(min_str , "00")
Hour_str = Str(_hour)
Hour_str = Format(hour_str , "00")
Day_str = Str(_day)
Day_str = Format(day_str , "00")
Year_str = Str(_year)
Year_str = Format(year_str , "00")
Return


'################################## Sound ##################################'


Speakersound:
Sound Speaker , 25 , 300
Return




End

radbruch
02.06.2013, 21:36
Hallo

Bevor ich mich da reinsteigere, bist du sicher, dass du alles wichtige in deinem gekürzten Code drin hast? Mir fehlt das:


Dim Fs20cycle1 As Word
Dim Count1 As Byte
Dim Rdy1 As Byte
Dim Rxbit1 As Byte
Dim Gesamtcode1 As Word

um den Code fehlerfrei zu übersetzen und bei "Case irgendetwas" sollte ein : am Ende stehen, oder?


Select Case Fs20cycle1
Case Is < 599: 'below 600µs, reset bitcounter
Count1 = 1
Case 600 To 1000: '600-1000µs, 0-bit
Rxbit1 = 0
Rdy1 = 1
Case 1001 To 1400: '1000-1400µs, 1-bit
Rxbit1 = 1
Rdy1 = 1
Case Is > 1401: 'over 1400µs, reset bitcounter
Count1 = 1
End Select

Gruß

mic

P.S.: Anstelle vom Speakersound würde ich bauchgefühlsmäßig besser Leds setzen/löschen.

Accenter
02.06.2013, 21:57
Lauffähig ist der Code nicht. Die ganzen DIM's habe ich rausgeschmissen damit man nicht soviel zu lesen hat. Damit passt auch alles weil die einzelnen Programmteile ja toll laufen. Es läuft eben leider nur nie der UART und der Input Capture zur selben Zeit. Hatte gehofft dafür gibts ne einfache Erklärung (die ich nicht kenne). Habe es mit ":" versucht am Ende des Casebefehls, brachte leider nichts (es funktioniert mit und ohne ":"). Dieser Teil funktioniert auch perfekt nur eben nicht zusammen mit dem UART. Es gibt da irgend ein Timingproblem, die einzelnen Codeteile laufen toll (einzeln).

radbruch
02.06.2013, 22:04
Oki, es wird aber etwas dauern bis ich mich da eingelesen habe.

radbruch
03.06.2013, 14:51
Hallo

Nun also endlich der erste Versuch: Bei 9600 Baud werden 150 Zeichen in 1 Sek. / 9600 * 150 oder 0,0156 Sekunden übertragen, weniger Zeichen entsprechend noch schneller. Mit


If Ischarwaiting(#2) = 1 Then 'Wenn über den UART2 was reinkommt springe zur UART Auswertung'
Gosub Uart2auswertung
End If

wird allerdings nur das erste Zeichen abgespeichert. Alle anderen werden "verschluckt", weil das Programm mit


Gosub Empfang868mhz 'Gehe zum 868Mhz Funkempfang'

beschäftigt ist. Ich hoffe, das ist's.

Gruß

mic

Accenter
03.06.2013, 18:13
Danke für deine Hilfe! Ja das könnte sein. Sobald ich "Gosub Empfang868mhz" entferne, läuft der UART einwandfrei und alle Eingaben übers Terminal kommen sofort zurück wie es sein soll. Ich befürchte, dass ich einen eigenen "kleinen" Mikrocontroller für das Empfangsmodul brauchen werde. Dieses übernimmt dann die Input Capture Auswertung und sobald da ein Funkcode im bekannten Format angekommen ist geht ein Port von 0 auf 1. Mein Hauptmikrocontroller sieht wenn er nichts zu tun hat immer nach ob dieser Port auf 1 ist. Wenn ja geht ein anderer Port von 0 auf 1 (Code wird angefordert) und der Funkcode wird nun seriell rüber gesendet. Das wird wohl die stressfreiste Möglichkeit sein. Am Ausgang des Funkmoduls liegt halt rauschen an und drum wird der Input Capture dadurch ziemlich "befeuert" vermute ich. Falls noch jemand weiß wie ich das ohne einen zweiten Mikrocontroller lösen kann, wäre ich sehr dankbar. Bin mir ziemlich sicher, dass es eine Lösung gibt, nur leider kenne ich sie nicht. Das ist nur ne Timingsache und sollte doch irgendwie zu lösen sein.

radbruch
03.06.2013, 18:34
Vielleicht funktioniert es so:


Do
If Ischarwaiting(#2) = 1 Then 'Wenn über den UART2 was reinkommt springe zur UART Auswertung'
Input Uart2eingang Noecho
Gosub Auswertung
End If
Gosub Empfang868mhz 'Gehe zum 868Mhz Funkempfang'
Loop

Accenter
03.06.2013, 19:02
Bascom spuckt mir da eine Fehlermeldung (Invalid datatype) aus in der Zeile "Input Uart2eingang Noecho".

radbruch
03.06.2013, 19:19
Bei meiner Demo 1.11.9.8 funktioniert das kompilieren anstandslos:


$regfile = "m128def.dat"
$crystal = 8000000
$baud = 9600
$framesize = 550
$swstack = 550
$hwstack = 550


Config Pind.4 = Input '868Mhz Input, direkt vom Empfänger.
Config Portd.5 = Output 'Enable 868Mhz Empfänger'
Config Porte.7 = Output 'led gelb led1'
Config Porte.6 = Output 'led grün led2'
Config Porte.5 = Output 'led rot led3'
Config Porte.4 = Output 'led blau led4'
Config Porta.0 = Output '433Mhz Sender'
Config Portb.7 = Output '868Mhz sender'
Config Portb.6 = Output 'Enable 868Mhz Sender'
Config Portb.5 = Output 'Speaker'
Config Portc.7 = Output 'LAN Modul Reset'
Config Portd.6 = Output 'LAN Modul Config'


Funkpinit Alias Porta.0 '433Mhz Sender'
Funkpinfs20 Alias Portb.7 '868Mhz Sender'
Enablefs20tx Alias Portb.6 '868Mhz Sendefreigabe Enable'
Enablefs20rx Alias Portd.5 '868Mhz Empfängerfreigabe Enable'
Icp1 Alias Pind.4 '868Mhz Input, direkt vom Empfänger.
Led Alias Porte.7 'gelbe LED'
Ledgruen Alias Porte.6 'grüne LED'
Ledrot Alias Porte.5 'rote LED'
Ledblau Alias Porte.4 'blaue LED'
Speaker Alias Portb.5 'Piezo'
Lanreset Alias Portc.7 'LAN Modul Reset'
Lanconfig Alias Portd.6 'LAN Modul Config'


Config Sda = Portd.1 'DS1307'
Config Scl = Portd.0
I2cinit
Config Twi = 100000
Waitms 100
Dim Ds1307w As Byte , Ds1307r As Byte : Ds1307w = &B11010000 : Ds1307r = &B11010001


Config Com2 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin1 = Buffered , Size = 150
Config Serialout1 = Buffered , Size = 150
Open "Com2:" For Binary As #2 'UART 2 wird aktiviert. Schicken mit Print #2 , "text"'
Clear Serialin1
Enable Interrupts
Waitms 100


Dim Buffer As Byte , Uart2eingang As String * 152


Dim _weekday As Integer
Dim _wochentag As String * 2 , _day As Byte , _month As Byte , _monat As String * 3 , _year As Byte , _sec As Integer , _min As Integer , _hour As Integer
Dim Sec_str As String * 2 , Min_str As String * 2 , Hour_str As String * 2 , Day_str As String * 2 , Year_str As String * 2 'Variablen für mehrtsellige Ausgabe'

Dim Fs20cycle1 As Word
Dim Count1 As Byte
Dim Rdy1 As Byte
Dim Rxbit1 As Byte
Dim Gesamtcode1 As Word

'Timer1: resolution = 1ms
Config Timer1 = Timer , Prescale = 8 , Capture Edge = Rising 'bei 8Mhz Quarz'
Timer1 = 0


On Icp1 Icp_int 'Input Capture an dem das 868Mhz Funkmodul betrieben wird'
Enable Icp1


Wait 3 'Wartezeit bis LAN Modul bereit ist'




Print #2 , "Programm start"
Waitms 200
Gosub Speakersound
Waitms 200
Gosub Speakersound




Hauptschleife:
Do
If Ischarwaiting(#2) = 1 Then 'Wenn über den UART2 was reinkommt springe zur UART Auswertung'
Input Uart2eingang Noecho
Gosub Auswertung
End If
Gosub Empfang868mhz 'Gehe zum 868Mhz Funkempfang'
Loop


'############## UART Auswertung ###############'


Uart2auswertung: 'Zeichen werden zusammengesetzt und bei 13 ausgewertet'
Disable Interrupts
Buffer = Inkey(#2)
If Buffer >= 13 Then
If Buffer = 13 Then
Gosub Auswertung
Else
If Len(uart2eingang) < 149 Then
Uart2eingang = Uart2eingang + Chr(buffer)
Else
Uart2eingang = ""
Clear Serialin1
End If
End If
End If
Enable Interrupts
Return


Auswertung:
Print #2 , Uart2eingang 'Gebe alles 1:1 aus was am UART reingekommen ist zum Test'
Gosub Uhrzeitlesen
Print #2 , Hour_str ; ":" ; Min_str ; ":" ; Sec_str 'Zeitstempel ebenso ausgeben'
Uart2eingang = ""
Clear Serialin1
Return


'#################### Input Capture 868Mhz Empfänger #############################'


Icp_int:
Fs20cycle1 = Timer1
Timer1 = 0
Select Case Fs20cycle1
Case Is < 599: 'below 600µs, reset bitcounter
Count1 = 1
Case 600 To 1000: '600-1000µs, 0-bit
Rxbit1 = 0
Rdy1 = 1
Case 1001 To 1400: '1000-1400µs, 1-bit
Rxbit1 = 1
Rdy1 = 1
Case Is > 1401: 'over 1400µs, reset bitcounter
Count1 = 1
End Select
Return


'#################### Funk Empfang 868Mhz #############################'


Empfang868mhz:
'Hier findet die Auswertung vom Input Capture ICP1 statt und wird der Variablen "Gesamtcode" übergeben'
'Der Code ist umfangreich, mehrfach getestet und funktioniert. Habe ihn entfernt damit der Code fürs Forum nicht zu Umfangreich wird'


Gosub Speakersound
Print #2 , Gesamtcode1 'Alles was über 868Mhz empfangen wird, wird hier ausgegeben zum Test'
Waitms 100
Return






'##################################### DS1307 ######################################'


Datumschreiben:
_day = 31 : _month = 05 : _year = 13
Uhrzeitschreiben:
_sec = 00 : _min = 13 : _hour = 23
Gosub Uhrumrechnung
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour) : _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart : I2cwbyte Ds1307w : I2cwbyte 0 : I2cwbyte _sec : I2cwbyte _min : I2cwbyte _hour : I2cstop : I2cstart : I2cwbyte Ds1307w
I2cwbyte 3 : I2cwbyte _weekday : I2cwbyte _day : I2cwbyte _month : I2cwbyte _year : I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) : _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return


Uhrzeitlesen: 'Lese Zeit und Datum aus dem DS1307'
I2cstart
I2cwbyte Ds1307w : I2cwbyte 0 : I2cstop : I2cstart : I2cwbyte Ds1307r : I2crbyte _sec , Ack : I2crbyte _min , Ack : I2crbyte _hour , Ack
I2crbyte _weekday , Ack : I2crbyte _day , Ack : I2crbyte _month , Ack : I2crbyte _year , Nack : I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) : _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Gosub Uhrumrechnung
Return


Uhrumrechnung:
Select Case _weekday
Case Is = 1 : _wochentag = "Mo"
Case Is = 2 : _wochentag = "Di"
Case Is = 3 : _wochentag = "Mi"
Case Is = 4 : _wochentag = "Do"
Case Is = 5 : _wochentag = "Fr"
Case Is = 6 : _wochentag = "Sa"
Case Is = 7 : _wochentag = "So"
End Select
Select Case _month
Case Is = 1 : _monat = "Jan"
Case Is = 2 : _monat = "Feb"
Case Is = 3 : _monat = "Mar"
Case Is = 4 : _monat = "Apr"
Case Is = 5 : _monat = "Mai"
Case Is = 6 : _monat = "Jun"
Case Is = 7 : _monat = "Jul"
Case Is = 8 : _monat = "Aug"
Case Is = 9 : _monat = "Sep"
Case Is = 10 : _monat = "Okt"
Case Is = 11 : _monat = "Nov"
Case Is = 12 : _monat = "Dez"
End Select
Sec_str = Str(_sec) '2-stellig'
Sec_str = Format(sec_str , "00")
Min_str = Str(_min)
Min_str = Format(min_str , "00")
Hour_str = Str(_hour)
Hour_str = Format(hour_str , "00")
Day_str = Str(_day)
Day_str = Format(day_str , "00")
Year_str = Str(_year)
Year_str = Format(year_str , "00")
Return


'################################## Sound ##################################'


Speakersound:
Sound Speaker , 25 , 300
Return




End

Accenter
03.06.2013, 19:31
War mein Fehler, konnte es nun kompilieren aber leider tut sich nun garnichts mehr. Weder das Funkmodul liefert was noch der UART.

radbruch
03.06.2013, 19:38
Möglicherweise braucht "Input" eine andere Endekennung als dein chr(13). LF chr(10) vielleicht?

Leider ist es doch CR:
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/uart_rs232_vom_computer/

for_ro
03.06.2013, 19:44
Du musst natürlich im Input auch den Kanal #2 angeben.
Ehrlich gesagt, halte ich den hier verfolgten Ansatz mit serialin=Buffered in diesem Fall für wenig effektiv.
Es werden dabei die Zeichen im Interrupt eingelesen und dann nochmals Code für die Verarbeitung gebraucht.
Bei 150 Zeichen vergeht da eine Menge Zeit, in der der ICP disabled ist.
Aber ich will das hier jetzt nicht unterbrechen.

Accenter
03.06.2013, 23:57
@for_ro: Du unterbrichst es nicht du hilfst mir damit :-) Bin für jeden Tipp und jedes Codebeispiel dankbar. Die 150 Zeichen sind stark überdimensioniert, ich brauche eigentlich nur ca 30 dann später. ICP hat irgendwie Priorität in meinem Code, der Funkcode kommt nämlich über den Input Capture immer sauber an, nur der UART nicht. Es wäre nicht schlimm wenn ICP kurz nicht empfangsbereit ist sobald etwas über den UART reinkommt das wird gleichzeitig sogut wie nie passieren später. Ich möchte es nur hinbekommen, dass beides läuft.

Hab den Kanal nun richtig angegeben aber leider brachte auch das nichts. Hast du einen Tipp für mich for_ro was ich ändern könnte damit es läuft? Bin beim UART leider nicht so fit programmiertechnisch.

Accenter
04.06.2013, 20:03
Habe jetzt einen Mega8 der sich nur um den Funkempfang kümmert in mein Projekt eingefügt. Der Mega8 (an dem das Funkmodul hängt) "sagt" nun dem Mega128, dass ein neuer Funkbefehl zum abholen bereit ist. Wenn der Mega128 grade nichts anderes "zu tun hat" fordert er den Funlcode an. Das ist die sauberste Lösung und es kann nun nichts mehr verschluckt werden. Danke an alle die versucht haben mir hier zu helfen.

peterfido
04.06.2013, 21:00
Hin und wieder nutze ich auch CoProzessoren. Da ist nichts gegen einzuwenden.

Edit:
Obwohl - Commodore ist damit pleite gegangen. Wer einmal einen Amiga hatte, brauchte keinen neuen. :rolleyes: