Forum: Mikrocontroller und Digitale Elektronik atmega 8 als schnitstelle


von DarkBeast (Gast)


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 ?????????

von Karl H. (kbuchegg)


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.

von Hannes L. (hannes)


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.

...

von DarkBeast (Gast)


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.

von Hannes L. (hannes)


Angehängte Dateien:

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.

...

von Hannes L. (hannes)


Angehängte Dateien:

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.

...

von DarkBeast (Gast)


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

von Hannes L. (hannes)


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.

...

von DarkBeast (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.