Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: TowiTek RFID Antenne Kategorie: Sonstige Hardware (von Franz-Peter - 24.12.2010 13:13)
Als Antwort auf Re: TowiTek RFID Antenne von PeterS - 24.12.2010 11:25
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board, Pro-Bot128
> >  > >
> > > > > Hallo Franz-Peter,
> > > > >
> > > > > vielen Dank für Deine Antwort.
> > > > > Hättest Du mal ein Beispiel, wie du den Empfang durchführst...
> > > > >
> > > > > Zur Syncronisation:
> > > > >
> > > > > Wenn man nach einem fehlerhaften Empfang oder zyklich ein Serial_Init_IRQ aufrufen würde,
> > > > > mü�te man sich nicht auch dann wieder syncronisieren?
> > > > >
> > > > > Da die Unit ja nur 2 serielle Schnitstellen hat, wie hast du denn die 4 Antennen angeschlossen?
> > > > > Ã?ber welche Entfernung gehst Du? Mit oder ohne Pegelwandler?
> > > > >
> > > > > GrueÃ?e Joerg
> > > > Hallo Joerg,
> > > > Das Problem beim Synchronisieren ist, dass Du aufgrund fehlender Anfangs- und Endekennung einen
> > > > fehlerhaften Empfang gar nicht erkennen kannst. Es sind ja alle Zeichen gültig.
> > > > Und ein unbekannter Transponder ist in diesem Sinne auch nur dann ein Fehler wenn Du ganz sicher
> > > > bist, dass nur die hinterlegten Transponder an deine Antenne kommen.
> > > > Ein zyklisches Serial_Init kann den Fehler sogar erst provozieren: Wenn das Init gerade
> > > > stattfindet, wenn die Antenne eine ID sendet, gehen vielleicht genau die ersten 1 oder 2 Zeichen
> > > > verloren und Du beginnst mitten in der �bertragung das Zählen deiner 5 Byte.
> > > > Zumindest wenn Du keinerlei EinfluÃ? darauf hast, wann ein Transponder an die Antenne kommt,
> > > > geht es nur mit einer Zeitüberwachung.
> > > > Ich starte einen 50ms Timer , wenn ich das (evtl vermeintliche) 1. Zeichen empfange.
> > > > Mit dem Empfang des 5. Zeichens wird der Timer wieder gestoppt. Läuft er vorher ab, wird der Empfang
> > > > abgebrochen und startet wieder beim 1. Zeichen.
> > > > Den Timer realisiere ich als Bytevariable, die im 10ms Interrupt heruntergezählt wird.
> > > > Das habe ich soeben im Thread von Christian beschrieben:
> > > > (Beta 2.12.06 Timer Probleme  http://ccpro.cc2net.de/forum/lesen.php?eintrag=5922 ).
> > > > Ich realisiere alle meine Timer so.
> > > >
> > > > Das mit den 4 Schnittstellen ist in der Tat ein Problem gewesen, dass micht etwas Aufwand gekostet
> > > > hat: Ich habe an eine Mega32 3 SCC Bausteine Z8530 angeschlossen ( ich weis nicht, ob es den noch
> > > > neu gibt, aber ich hatte noch einige in der Schublade). Jeder enthält 2 serielle Schnittstellen und
> > > > wird über einen 8-Bit Datenbus angesprochen.
> > > > Da der Mega32 keinen externen Datenbus hat, habe ich das per Assemblerprogramm über die Ports
> > > > emuliert. Die Interruptverarbeitung für die Bausteine habe ich auch in Assembler geschrieben, da
> > > > der Interpreter für die Verwaltung von 6 seriellen Schnittstellen zu langsam ist.
> > > > Der Mega32 arbeitet nun als Konzentrator für die 4 Antennen und setzt die empfangenen ID's in eine
> > > > interne 1 Byte-Transpondernummer um. Ã?ber eine der Schnittstellen ist die Mega32 mit der Steuerung
> > > > (Mega128) verbunden, die nun abfragen kann, welcher Transponder wo erkannt wurde.
> > > > GruÃ?
> > > > Franz-Peter
> > > > P.S. ich beutze keine Pegelwandler, und die maximale Entfernung ist ca. 3m
> > > >
> > >
> > > Hallo Franz-Peter,
> > >
> > > vielen Dank für Deine ausführliche Erklärung.
> > >
> > > Da du sehr viel in Assembler schreibst und sehr zeitkritisch bist, stellt sich für mich die Frage,
> > > warum du ein C-Control benutzt und nicht den AVR C Compiler?
> > >
> > > Kann man das mit den 6 Schnitstellen nicht einfach über ein 'oder' machen, wenn man davon
> > > ausgehen kann, das immer nur eine Antenne gleichzeitig verwendet wird?
> > >
> > > Ich habe da noch mal eine Frage: Benutzt Du eine Antenne im AuÃ?enbereich?
> > > Die Antennen sind ja nur bis 0 Grad spezifiziert und ich wollte eine an der
> > > Eingangstür verwenden.
> > >
> > > Mit der syncronisation hatte ich mir das wie folgt vorgestellt:
> > > (Mü�te eigentlich ähnlich deinem Timer sein)
> > >
> > > In einem Thread alle 50ms das erste Zeichen abfragen.
> > >
> > > Wenn Zeichen empfangen dann ein Thread_Delay von 50ms
> > >
> > > Wenn empfangen Daten falsch (egal ob asynchron oder nicht registrierter Chip)  ==> Seriell_Init
> > >
> > >
> > > Grü�e Joerg
> > >
> > Hallo Joerg,
> > insgesamt ist der Anteil der in Assembler geschriebenen Software bei mir immer noch recht gering.
> > Auch wenn das jetzt bei dem Mega32 für die RFID Antennen etwas mehr ist. Meine 'Hauptsteuerung'
> > mit Mega 128 enthält eigentlich wenig zeitkritisches. Das lässt sich alles noch mit dem Interpreter
> > beherrschen. Weil ich sehr viel Bitverarbeitung benötige ( bisher ca. 100 I/O für Lichtschranken,
> > Relais u.ä - und es wird noch mehr werden) habe ich mir nur ein paar Assemblerroutinen für eine
> > komfortable Bit-Verarbeitung geschrieben. Die CC pro hat da meiner Meinung nach (noch?) ein gewisses
> > Defizit.
> > Ich setze die RFID Antennen nur im Innenbereich ein. Deshalb ist der Temperaturbereich für mich kein
> > Problem.
> > Die Synchronisation müsste so wie Du es vorhast, auch funktionieren. Ich würde nach dem Thread_Delay
> > dann abfragen, ob genau 5 Zeichen empfangen wurden (geht ja mit Serial_IRQ_Info). Wenn nicht, bist
> > du auf jeden Fall asynchron und kannst gleich ein seriell Init machen.
> > GruÃ? - und ein frohes Weihnachtsfest
> > Franz-Peter
>
> Hallo Franz-Peter,
>
> >Die CC pro hat da meiner Meinung nach (noch?) ein gewisses Defizit.
>
> Was könnte man da besser machen?
>
> Gruss Peter
Hallo Peter,
aus meiner Sicht fehlt der VariablenTyp 'Bit' und damit die Möglichkeit Bits innerhalb eines Bytes
einzeln  zu benennen und dann in Ausdrücken direkt anzusprechen (Setzen, löschen, abfragen).
Mit meinen Assemblerroutinen habe ich mir diese Möglichkeit geschaffen. Da nur Arrays per Ref an
Unterprogramme übergeben werden können, kann ich mit den Assemblerprogrammen nur die Bits innerhalb
eines Arrays einzeln ansprechen, was für meine Zwecke aber ausreicht. Ich kann also ein Byte-Array
mit z.B. 5 Elementen jetzt auch als Bit-Array mit 40 Bits ansprechen. Ich habe die Aufrufe
void ClrBit( char Basis[], Int BitNr )
void SetBit( char Basis[], Int BitNr )
void TogBit( char Basis[], Int BitNr )
byte TstBit( char Basis[], Int BitNr )
realisiert. Die Bitnummer läuft linear durch das ganze Array durch.

Schön wäre es, wenn man dafür nicht den Umweg über Up-Aufrufe benötigen würde, sondern dies wie
ganz normale Array-Elemente in Ausdrücken ansprechen könnte. Ich denke aber, das es wichtig ist,
dass man das Array weiterhin auch als Byte Array ansprechen kann. Am Anfang meiner Hauptschleife
lese ich alle Eingangsports byteweise in solche Arrays ein. Die werden dann in einer umfangreichen
Logik verarbeitet und in entsprechende Arrays für die Ausgangsports geschrieben. Am Ende werden
die Arrays für die Ausgänge wieder byteweise an die Peripherie geschrieben. Wenn man die C-Control
wie eine SPS einsetzt und fast nur logische Bit Ein- und Ausgänge hat geht es kaum anders.

Vielleicht können ja auch die anderen Forumsteilnehmer ihre Meinung dazu kundtun, ob das was ich
mache eher ein Einzelfall ist, oder ob das auch anderen helfen würde.

weihnachtliche Grü�e
Franz-Peter

P.S. Kannst Du schon was über ein Zeitraster für 'Interrupts in Assembler' sagen? Die oben be-
schrieben Mega32 als RFID Konzentrator wollte ich eigentlich schon als I2C Slave anschliessen.
Irgendwann im nächsten Jahr habe ich noch etwas ähnliches vor, und da wäre es schön wenn es
klappt, die Mega32 als I2Slave zu betreiben.


    Antwort schreiben


Antworten:

Re: TowiTek RFID Antenne (von PeterS - 25.12.2010 23:23)