www.mikrocontroller.net

Forum: Compiler & IDEs Hilfe bei implementierung eines Cricket Interfaces


Autor: Bernd Klein (Gast)
Datum:
Angehängte Dateien:

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

Autor: Bernd Klein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mist, ich vergaß

Im AVRStudio (Simulator), ist die Zeit zwischen den einzelnen Bits exakt 
10us.

nochmals danke, falls einer oder mehrere mir bei meinem 
WEihnachtsgeschenk helfen !!!

Autor: Frank B_. (frank_b) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne das Programm angesehen zu haben:

Es könnte am internen Oszillator liegen.
Wenn die 10 us wirklich so genau sein müssen, solltest Du einen Quartz 
verwenden, der interne Oszillator ist nicht besonders genau.

Frank

Autor: Gast1985 (Gast)
Datum:

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

Autor: Bernd Klein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi (Gast)
warum einen Trigger auf
Fallende Flanken ? Solltest du nicht mit einem Trigger auf steigende
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

Autor: Bernd Klein (Gast)
Datum:

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

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.