Hallo Leute,
da mein 1 Beitrag von Trolls zugespammt wurde und so geschlossen werden musste,
probiere ich es erneut. Vielleicht könnten die Moderatoren erst die Antworten auf diesen Beitrag freischalten, so erspart man sich
passierte..
Ich habe per privatnachricht einige interessante Ideen bekommen, da besagter Beitrag zugespammt wurde.
Konsens ist, daß der Code nur dann nicht funktioniert, wenn es Interrupt-Unterschiede/Inkompatibilitäten zwischen mega16/32/1284p und 2560/2560V gibt.
Jetzt die Frage an die Experten : Ich nutze die bekannte ISR UCXR. Sobald also ein Zeichen an der Schnittstelle ankommt, wird der ISR ausgelöst und das Zeichen aus UDR ausgelesen und einem String zugeordnet.
In der Hauptschleife wird die Zeichenlänge dieses Empfangstrings "gemessen" und ab Länge x in einen anderen String kopiert und gelösch, und es geht von vorne los
das funktioniert problemlos seit jahren auf einigen mega16/32/1284p-Systemen. In meiner Naivität habe ich die paar Zeichen Code auch in das neue 2560V System kopiert und es funktioniert. Zeichen werden eingelesen.
Hier mal grob der Code:
On Urxc Onrxd
Enable Urxc
Enable Interrupts
Onrxd:
Inchar = UDR
If Inchar = 33 then ' Startzeichen = 33
Aktiv =1 'Startzeichen vorhanden
Incr Zaehler ' 5 Zaehler=ca. 500ms
end if
If Aktiv = 1 then
Empfang_String= Empfang_String + CHR (Inchar)
end if
return
In der Hauptschleife passiert dann das
do
if len (Empfang_String) >= 12
Disable Urxc
Arbeits_String =Empfangs_String
Empfangs_String =0
Aktiv =0 ' Bereit für neues Startzeichen
Enable Urxc
end if
loop
ist das jetzt 100% 2560V-Kompatibel? Wie gesagt, die richtigen Zeichen kommen in der richtigen Menge an und werden richtig ausgelesen .
Weitere Idee: Ich benutze Bascom 2.075 von 2015 und Avr Studio 4. Jetzt nicht das neueste, aber bei 16/32/1284p vollkommen ausreichend. Für den 2560V zu alt?
Vielen Dank
da mein 1 Beitrag von Trolls zugespammt wurde und so geschlossen werden musste,
probiere ich es erneut. Vielleicht könnten die Moderatoren erst die Antworten auf diesen Beitrag freischalten, so erspart man sich
passierte..
Ich habe per privatnachricht einige interessante Ideen bekommen, da besagter Beitrag zugespammt wurde.
Konsens ist, daß der Code nur dann nicht funktioniert, wenn es Interrupt-Unterschiede/Inkompatibilitäten zwischen mega16/32/1284p und 2560/2560V gibt.
Jetzt die Frage an die Experten : Ich nutze die bekannte ISR UCXR. Sobald also ein Zeichen an der Schnittstelle ankommt, wird der ISR ausgelöst und das Zeichen aus UDR ausgelesen und einem String zugeordnet.
In der Hauptschleife wird die Zeichenlänge dieses Empfangstrings "gemessen" und ab Länge x in einen anderen String kopiert und gelösch, und es geht von vorne los
das funktioniert problemlos seit jahren auf einigen mega16/32/1284p-Systemen. In meiner Naivität habe ich die paar Zeichen Code auch in das neue 2560V System kopiert und es funktioniert. Zeichen werden eingelesen.
Hier mal grob der Code:
On Urxc Onrxd
Enable Urxc
Enable Interrupts
Onrxd:
Inchar = UDR
If Inchar = 33 then ' Startzeichen = 33
Aktiv =1 'Startzeichen vorhanden
Incr Zaehler ' 5 Zaehler=ca. 500ms
end if
If Aktiv = 1 then
Empfang_String= Empfang_String + CHR (Inchar)
end if
return
In der Hauptschleife passiert dann das
do
if len (Empfang_String) >= 12
Disable Urxc
Arbeits_String =Empfangs_String
Empfangs_String =0
Aktiv =0 ' Bereit für neues Startzeichen
Enable Urxc
end if
loop
ist das jetzt 100% 2560V-Kompatibel? Wie gesagt, die richtigen Zeichen kommen in der richtigen Menge an und werden richtig ausgelesen .
Weitere Idee: Ich benutze Bascom 2.075 von 2015 und Avr Studio 4. Jetzt nicht das neueste, aber bei 16/32/1284p vollkommen ausreichend. Für den 2560V zu alt?
Vielen Dank