Hallo, Ich arbeite hier an einem Freescale µC, der Typ tut nichts zur Sache und habe mal eine einfache Frage die wohl nicht so einfach zu beantworten ist. Also, an dem µC sind Eingänge, digitaler und analoger Art und Ausgänge angeschlossen, sowie ein Display und ein 2. µC. Meine Frage dreht sich um das reden zwischen PC und µC, ich schreibe grad in C# an einer Software die den µC ausliest.., ein Bsp: Software möchte wissen, welcher der 8 Fehlereingänge grad einen Fehler anzeigt (wird eig. am Display gemacht, funkt auch). Ich habe es so gelöst das 1 Byte als FF 0_Fehler anzeigt, ein BF wär Fehler am Vorletzten und ein 7F ein Fehler am letzten Port, das kann man ja dann leicht rausfischen. Möchte der PC nun dieses Byte haben, sendet er ein hallo (0x10), darauf ein hallo zurück (0x10) -> Bed. Sie verstehen sich. Jetzt ein 0x11 für 'Sende mir FehlerByte' -> µC sendet Fehlerbyte + 0x12 für 'Das war grad ein Fehlerbyte' (um missverst. durch Bitfehler zu vermeiden). Das klappt auch alles,flüssig und gut, aber so richtig glücklich bin ich mit meiner Lösung nicht. Ich imitiere ein Bissel den IIC Bus indem der PC Master spielt und der µC nur auf Fragen Antwortet. (Bis auf 1-2 Ausnahmen die noch nicht eingbaut sind) Gibt es da Normen an die ich mich halten muss, laufe ich grad in die falsche Richtung oder versperre mir Sachen für später? Oder kann ich das nach eigenen Gut-dünken tun? MfG
Wäre es nicht besser einen kleinen Telegrammrahmen zu definieren z.B. vom PC=> "Hallo" "Ich möchte" "Checksumme" vom µC => "Hallo" "Du möchtest" "Hier ist was du möchtest" "Checksumme" Hiermit kann eine einfache und sichere Kommunikation erfolgen
Meinst du mit Checksumme grad-ungerade Anzeige (Sticky-Bit) oder eine echte Funktion? MfG
einfach : Summe der Übertragenen Byte (Addition!) kompliziert : CRC16 generieren Die Checksumme wird u.U. 2Byte benötigen Dem Empfänger soll nur die Möglichkeit gegeben werden eine RICHTIG/FALSCH Beurteilung durchzuführen.
hm, gute idee, könnt mein 0x12 vorsetzen und dahinter ne crc, k. Ty + MfG
Und wenn Du nicht alles neu erfinden willst, sieh Dir mal S.N.A.P. an: http://www.hth.com/snap/ Frank.
Sehr schön ist auch das Serielle Protokoll, was der Bluetooth Chip LMX9820 benutzt. Ich nehm das mittlerweile (manchmal leicht abgewandelt) für fast alle Kommunikation hier... Infos z.B. hier: http://www.reimesch.de/download/adeunis/LMX9820mn.pdf Seite 24ff
Schau ich mir an, Danke! Als CRC nehm ich, da mein komisches µC-C (CodeWarrior) keine CRC hat die was ordentliches liefert, dies:
1 | word crc_table[256];; |
2 | bool crc_table_sema=0; |
3 | word AS1_CRC16(byte *msg,word cnt) |
4 | { int crc_value; |
5 | |
6 | |
7 | //void InitCRC_Table(void)
|
8 | //{
|
9 | //register WORD b, v;
|
10 | //register signed char i;
|
11 | word b,v; |
12 | signed char i; |
13 | |
14 | if (crc_table_sema==0) |
15 | {
|
16 | for( b = 0; b <= 255; ++b ) |
17 | {
|
18 | for( v = b << 8, i = 8; --i >= 0; ) |
19 | { if ( (v & 0x8000) != 0x0000 ) |
20 | v = ( v << 1 ) ^POLYNOMIAL; |
21 | else
|
22 | v = v << 1; |
23 | }
|
24 | crc_table[b] = v; |
25 | }
|
26 | crc_table_sema=1; |
27 | };
|
28 | //}
|
29 | |
30 | |
31 | |
32 | //WORD CRC_calculation(BYTE *msg, WORD cnt)
|
33 | //{
|
34 | while( cnt-- != 0x0000) |
35 | crc_value = (crc_value << 8) ^ crc_table[(crc_value >> 8) ^*msg++]; |
36 | return( crc_value ); |
37 | //}
|
38 | |
39 | } // ende AS1_CRC16 |
Ist nat. hier aus dem Forum, aus einem der 1.000.000 >> 2^?? Threads darüber. Extra feste Bereiche zu jedem Forum, indem der Moderator solche geklärten sachen einfach komplett angibt, wär toll, macht aber halt jemanden auch Arbeit... . Jut, ran. Ty + MfG
Ich bekomme bei 'v << 8' oder 'b<<1' immer Fehler das Int nicht implitzit in ushort umgewandelt werden kann, er soll ja nix wandeln sondern die Bits schieben... was mach ich da anders in C#?
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.