mikrocontroller.net

Forum: PC-Programmierung Eigenen Befehlssatz entwickeln zur µC Abfrage


Autor: Board Geist (boardgeist)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Board Geist (boardgeist)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meinst du mit Checksumme grad-ungerade Anzeige (Sticky-Bit) oder eine 
echte Funktion?

MfG

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Board Geist (boardgeist)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm, gute idee, könnt mein 0x12 vorsetzen und dahinter ne crc, k.

Ty + MfG

Autor: Frank Jonischkies (frajo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wenn Du nicht alles neu erfinden willst, sieh Dir mal S.N.A.P. an:
http://www.hth.com/snap/

Frank.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Board Geist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau ich mir an, Danke!

Als CRC nehm ich, da mein komisches µC-C (CodeWarrior) keine CRC hat die 
was ordentliches liefert, dies:

word crc_table[256];;
bool crc_table_sema=0;
word AS1_CRC16(byte *msg,word cnt)
{    int crc_value;
 

//void InitCRC_Table(void)
//{
  //register WORD b, v;
  //register signed char i;
  word b,v;
  signed char i;

   if (crc_table_sema==0)
   {
  for( b = 0; b <= 255; ++b )
  {
    for( v = b << 8, i = 8; --i >= 0; )
    { if ( (v & 0x8000) != 0x0000 )
  v = ( v << 1 ) ^POLYNOMIAL;
      else
        v = v << 1;
    }
    crc_table[b] = v;
  }
  crc_table_sema=1;
  };
//}


  
//WORD CRC_calculation(BYTE   *msg, WORD  cnt)
//{
  while( cnt-- != 0x0000)
    crc_value = (crc_value << 8) ^ crc_table[(crc_value >> 8) ^*msg++];
  return( crc_value );
//}

}    // 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

Autor: Board Geist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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#?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.