www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik atmega 8 als schnitstelle


Autor: DarkBeast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ans Forum

Ich habe hier ein Problem

Für eine Robotsteuerung möchte ich einen Atmega8 sozusagen als 
Schnitstelle misbrauchen.

Angeschlossen sind an den Mega ein LCD-Display (HLM50530) ein Tsop für 
IR-Signale und das RFM12 von Pollin

Mein Problem ist jetz das ich zwar alle Teile einzel ansteuern kann aber 
nicht alles zusammen grübel das Forum hat mir schon super geholfen.

Die Frage ist jetzt " wie bekomme ich alles unter einen Hut?"

Die LCD-Routine ist in asm geschreiben Der teil für den RFM12 und das 
IR-Modul aber in C

Ich wollte erst eine hier gefundene C-Routine für das LCD verwenden hab 
auch hier im Forum eine gefunden.
Diese Läuft allerdings nur auf einem Kompletten port

Ich brauche aber z.B. teile von portb für LCD und RFM12 oder ir also 
portpins von b wie krieg ich das hin ?????????

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Indem du den Code analysierst und dir entsprechenden Änderungen
im Code machst, so dass du die einzelnen Pins deines LCD
beliebig an andere Ports verteilen kannst.

Im übrigen ist es keine so gute Idee, das zu tun. Vor allem das
Verteilen der Datenbits des LCD auf andere Pins als 0 bis 3 bzw.
4 bis 7 verkompliziert den Code deutlich. Es wäre daher zu überlegen
ob man nicht eine Hardwareänderung macht und die LCD Pins so gut
es geht zusammenhält.

Alternativ kannst du auch die LCD Lib von Peter Fleury nehmen.
Dort lässt sich jeder Pin einzeln an einen anderen Port verlagern.
Allerdings hätte diese Lib gerne, dass der R/W Pin vom LCD benutzbar
ist.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Mein Problem ist jetz das ich zwar alle Teile einzel ansteuern kann aber
> nicht alles zusammen grübel das Forum hat mir schon super geholfen.

Das ist eine Frage des Konzeptes. Das Aneinanderreihen von 
Tutorialbeispielen funktioniert nicht sooo einfach.

Vermeide Warteschleifen (egal ob Busywait oder Zeitschleifen) und kehre 
sofort zur Mainloop zurück, wenn einre Aufgabe jetzt nicht erfüllt 
werden kann. So kann Dein AVR andere Dinge erledigen, anstatt auf der 
Stelle zu treten und Takte zu zählen oder Busy/Ready zu pollen.

Der LCD-Code kann z.B. im Hintergrund laufen, zwar in der Mainloop, aber 
von einem Timer über Semaphore synchronisiert. Nutzt Du noch etwas 
AVR-SRAM für einen "Bildschirmspeicher", dann werden Schreibzugriffe 
extrem schnell. Das komplette Auslagern in die ISR könnte dagegen andere 
Tasks ausbremsen.

Das Funkmodul wird ja über Hardware-SPI bedient, oder? Dies lässt sich 
per Interrupt steuern. In der ISR dann nur das Nötigste zun (Daten 
sichern, Semaphore setzen), damit die ISR recht kurz bleibt.

Den TSOP hast Du hoffentlich an den ICP-Eingang angeschlossen? Somit 
kann der IR-Empfang in der ICP-ISR als State-machine laufen und bei 
Erkennen eines kompletten gültigen Telegramms eine Semaphore für die 
Mainloop setzen, die dann auf dieses Telegramm reagieren kann.

...

Autor: DarkBeast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die lib von Peter Fleury ist leider nicht kompatibel zu meinem Display. 
Die daten Pins bleiben auch schön zusammen aber da ich z.B. i2c zur 
verbindung mit dem restlichen system nutzen möchte und das rfm 12 auch 
an bestimmte i/o´s gebunden ist muss ich leider etwas verteilen.

Im moment versuche ich gerade aus dem Code den ich für meine hardware 
habe selber includes oder libs zu machen die ich immer wieder verwenden 
kann.

Das klappt noch nicht sooooooo ganz. Bin relativ neu mit avr's und 
bisher hab ich immer Bascom verwendet.

C ist mir halbwegs geläufig von Linux naja nur asm ist für mich ein buch 
mit sieben Siegeln.

Autor: Hannes Lux (hannes)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht helfen Dir meine LCD-Routinen für das 8x24-LCD mit M50530 
weiter. Nur mal so zum Anschaun. Ältere Routinen für dieses Display, die 
keinen Bildschirmspeicher im AVR-SRAM nutzen, findest Du, wenn Du nach 
"8x24" suchst.

...

Autor: Hannes Lux (hannes)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch Teile des Hauptprogramms zum besseren Verständnis der 
Routinen. Es enthält aber nur Deklarationen, Initialisierung, Mainloop 
(ohne Job-Routinen) und ISRs und ist daher nicht lauffähig.

...

Autor: DarkBeast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau Diese routine hab ich mir von deiner HP gezogen und versuche die 
gerade in C umzusetzen oder kann ich den asm code irgendwie in c 
einbinden ????? Ich ver wende überigens avr-studio mit STK500

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diese Version (mit Bildschirmspeicher im AVR-SRAM) ist noch gar nicht 
auf meiner Homepage.

Tja, und für C bin ich nicht zuständig, ist mir zu kryptisch.

Aber auch in C sollte es möglich sein, in den Interrupts Semaphores zu 
setzen und in der Mainloop die Jobs entsprechend abzuarbeiten. Etwas 
ASM-Verständnis kann auch in C nicht schaden, wenn man AVRs 
programmieren will. Meine Quelltexte sind übrigens so kommentiert, dass 
man auch ohne Verständnis der ASM-Befehle den Sinn verstehen kann.

...

Autor: DarkBeast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich werds probieren denk is ja wirklich sehr ausführlich kommentiert

hmmmm so wie für dich c kryptisch ist ist es asm für mich

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.