Hi Leute, was kann es denn eigentlich für Gründe geben, dass der MC plötzlich nichts mehr empfangen kann (über UART)? Habe sowohl an der HW als auch SW nichts geändert, aber trotzdem hat es den anschein als ob nichts mehr in den MC reinkommt...! habt ihr vielleicht irgendwelche ideen / vorschläge? gruß, semo
Kabel richtig dran? MAX232 tot? Einfach mal die +-10V messen, wenn die nicht mehr anliegen, ist der MAX kaputt. Nach dem Fehler hab ich mal drei Stunden lang gesucht ...
verwende garkeinen MAX zum Empfang! aber danke für deine antwort..! ;o) -> MC ist mit einem Handy (S45) verbunden - als Spannungswandler dienen Z-Dioden! semo
ok, alles klar...nehme alles wieder zurück... -> hatte eine falsche abfrage! ;o) jedoch bin ich nun auf ein anderes problem gestoßen: ich schreibe meine empfangenen Zeichen in ein array rein -> RecBuffer[cn]=UDR; (char RecBuffer[65]) nun frage ich dieses array mit einer funktion auf einen bestimmten inhalt ab, aba ich bekomme jedesmal ein andres ergebnis (andere ausgabe). -> scheint so, als befinden sich ständig andere zeichen im array obwohl ich jedesmal den zähler (cn) auf null setze wenn die selbe nachricht reinkommt. -> kann es sein, dass ich mein empfangsarray "löschen" muss oder so? bin für jede antwort dankbar, gruß semo
Hallo semo,
>-> kann es sein, dass ich mein empfangsarray "löschen" muss oder
so?
deine Indexvariable "cn":
- läuft dir über die Puffer-Grenze. (65)
- der Datentyp "char" läuft über bei 255
Du musst in deinen Interrupt z.B. folgendes einfügen:
if(cn > sizeof(RecBuffer))
cn=0;
(Ich habe den Code nur überflogen ...)
Gruß
Fiffi
danke Fiffi, das wäre natürlich eine erklärung dafür... obwohl, theoretisch müsste es doch auch klappen wenn ich vorher schon - bevor wieder etwas erneut empfangen wird - die indexvariable "cn" auf null setze, oder? (hab das nämlich so in meinem bisherigen gesamt-code gemacht! -> wenn ext. Int0, dann setze cn=0, führe einen befehl aus und empfange...!) -> oder ist es trotzdem besser ("sicherer") zusätzlich noch deine abfrage einzubauen? gruß, semo
Hallo semo, je länger ich deiner Code betrachte, je mehr Fragezeichen sammeln sich über meinem Kopf. 1. Ich bin nicht sicher ob du zwei mal das selbe Ergebnis bekommst, wenn du zwei mal UDR ausliesst. 2. Zeitlich vollkommen unabhängig prüfst du in der Hauptschleife die Variable "received" ab. Das ist doch nur ein Glücksspiel ... 3. Die Variable "received" hast du nicht als "volatile" deklariert. Wenn du eine Variable mit volatile deklarierst, wird die Variable jedesmal neu gelesen, und nicht in einem Register bis zur nächsten Verwendung verwahrt ... 4. Wann wird die Variable "rec" beim Einschalten "== 1" ? Prüfe es im Interrupt: volatile unsigned char bRecv = 0; SIGNAL(SIG_UART_RECV) { RecBuffer[cn]=UDR; if((RecBuffer[cn] == 0x30) && (bRecv == 0)) bRecv = 1; cn++; } int main (void) { for(;;) { if((rec==1) && (bRecv != 0)) { selectNumber(); rec=0; bRecv = 0 } } } Was hat dein Code für eine Funktion ? Gruß Fiffi
sorry, wär natürlich besser gewesen ich hätte gleich den kompletten code gepostet... also, hier die Funktion von meinen Code: Beim ext. Int0 (Schalter On) wird ein Befehl ausgeführt (at+cpbr=99) um den Telefonbucheintrag vom Handy auszulesen -> Handy antwortet dann wie folgt: <+CPBR: 99,"06504900111",129,"Test-Max"> -> wenn nun dieser String empfangen wurde (RecBuffer) dann führe die Funktion "selectNumber" aus um NUR die Telefonnummer auszulesen (zwischen den beiden ")und anzurufen! -> wenn Verbindug besteht (received==0x39)dann...weiter im programm (enable interrupt + overflow)...! sodale, hoffe nun ist es etwas klarer; vielleicht hast du ja kurz zeit um den code mal durchzucheckn... erstmals danke - d. antworten haben mir jetzt scho ziemlich helfen können! (wie du sicha scho bemerkt hast, is des programmieren net unbedingt meine stärke... g) gruß, semo
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.