Hilfe bei implementierung eines Cricket Interfaces

Gast #723759
Lesenswert?

Moin AVR'ler,

ich habe ein großes Problem, das ich leider nicht gebacken bekomme. Mein 
Sohn besitzt eine HandyCricket (http://www.handyboard.com/cricket/) - 
Feines Teil. Als Erweiterung besitzt dieses Board einen Bus, der von 
externen Controllers zur Kommunikation genutzt werden kann.

Nun möchte ich ein IR-Interface für meinen Sohn bauen, bin aber zu blöd 
um das Softwareinterface für den Cricket-Bus zu implementieren. Es 
funtiioniert leider nicht.

Wichtig ist, das das Timing exakt stimmt - das ist zumindestens die 
Aussage der Cricket-community (die arbeiten alle mit PIC's). Gelesen 
werden 9 Bits + Startbit
Jede Bitsequenz ist exakt 10us lang. (siehe 
http://www.handyboard.com/cricket/tech/bus.shtml)

Hier ein Paar infos zu meinem Testsystem
ATTiny 26, interner Osc. auf 4Mhz

Die eigentliche "Lese-Methode" ist in Assembler geschrieben (übrigens 
mein erstes Assembler Programm - wahrscheinlich liegt es daran)

Ansonsten im Attachment gibt es eine README.TXT DAtei, da steht noch so 
einiges drin.

Wäre super, wenn ihr mir helfen könnt - die Zeit bis Weihnachten ist 
verdammt knapp !!

Gruß
Bernd
Angehängte Dateien:
Gast #723958
Lesenswert?

Hallo,

Also wenn du den Bus manuell auslesen willst warum einen Trigger auf 
Fallende Flanken ? Solltest du nicht mit einem Trigger auf steigende 
Flanke das 10µs Sync Bit erwischen und den 8 Bit Timer starten?

Vorteiler 1 und einen Output Compare auf 13. Dann liest du den Pin etwa 
3 mal,
also alle 3,33 µs aus (genau 3,25 mal aber bei 30 Samples kann man die 
Verschiebung vergessen). Somit kannst du die 3 Compares vergleichen und 
zum Beispiel sagen: 2/3 od. 3/3 = 1 also war das Bit 1 bei 0 
entsprechend andersrum.

Den bei einem Signal wie 11.0001.1000 würde erst nach dem 2. Bit eine 
fallende Flanke erkannt und dann wieder nach dem 7. Bit.

Zur minimierung des versatzes nach Sync Bit Timer und Compare frisch 
setzen und starten oder mit den Zählerstand spielen und Versuchen alle 
10µs neu Starten.
Gast #723995
Lesenswert?

Hi (Gast)
1
warum einen Trigger auf
2
Fallende Flanken ? Solltest du nicht mit einem Trigger auf steigende
3
Flanke

Das Cricket zieht im Normalzustand den Bus auf 5V (high). Sobald es 
anfängt Daten zu senden wird der Bus für 100ms (sync-Phase) auf low 
gezogen (fallende Flanke). Nach 100us kommt ein Startbit (immer high) 
für 10us. Danach folgen die restlichen 9 Bits im 10us Abständen.

Mein gewählter Ansatz ist so:
INT0 auf fallende Flanke einstellen, dann auf Startbit warten. Sobald 
das da ist im 10us Intervall 9Bits einlesen.

Soweit zur Theorie - leider funzt der Kram in der Praxis mit meinem 
Progamm aber nicht :-(

Mit dem Timer ist eine Idee, muss ich mal ausprobieren

Gruß
Bernd
Gast #725175
Lesenswert?

Problem ist gelöst !

Es lag tatsächlich am timing. Die Benutztung eines internen Oszillators 
bei einem exakten Timing (10us) ist wohl entweder nicht möglich oder 
sehr schwierig. Nach Einsatz eines 4Mhz Quarzes funktioniert der Kram

Danke für die Tips
Bernd

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren