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 ?????????
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.
> 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. ...
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.
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. ...
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. ...
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
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. ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.