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)