Hallo zusammen, ich habe mir mal ein bischen GEdanken gemacht zum Thema Modelleisenbahn und Ampel. Im Anhang findet sich ein Programm, dass eine Ampelkreuzung mit überlappenden Rotphasen steuert. ein Fußgängerampel werde ich bei Gelegenheit auch noch implementrieren, sowie evtl. eine Tag-/Nachtschaltung (vielleicht über Schalter einstellbar) dazuprogrammieren. Ihr könnt gerne ein paar Kommentare oder Verbesserungsvorschläge anbringen. Über konstruktive Kritik freue ich mich immer. Habt aber bitte etwas Nachsehen, immerhin ist das erst mein zweites Programm für µC. Viel Spaß beim Ansehen. MFG Mister L. Laffa
konstruktive Kritik: Wenn du den Registern Variablennamen gibst solltest du aussagekräftige Namen nehmen. >ldi eins,219 ;PortB auf 1tes Lichtbild einstellen >ldi zwei,4 ;Dauer auf 4sec einstellen >out portb,eins ;Ausgabe des Lichtbildes auf PortB >rcall time ldi zwei,4 gehoert zu rcall time vom logischen Aufbau von der Struktur wäre es besser die ganzen Werte in eine ROMtabelle zu legen und dies Werte dann über einen Index zu laden. Die Zeit ist einfacher mit einem Timer zu realisieren
Hach, ich hät's fast vergessen, die Ausgänge sind wie folgt zu beschalten: PB0 grün Richtung A PB1 gelb Richtung A PB2 rot Richtung A PB3 grün Richtung B PB4 gelb Richtung B PB5 rot Richtung B PB6 nicht belegt PB7 nicht belegt Vielleicht könnte man die beiden freien Pins für die Fußgängerampel verwenden. Allerdings könnte man eine realistische Überlappung der Rotphasen dabei nicht realisieren. MFG Mister L. Laffa
Hallo Wolfram, das mit den Registern habe ich übersehen. Ich habe zu Beginn nicht gewußt, welche (und wieviele) Register ich benötige, da habe ich sie einfach durchnummeriert und dann vergessen umzubenennen. Beim logischen Aufbau hatte ich Folgendes im Kopf: Einlesen der Daten für die jeweilige Situation, dann Ausgabe des Lichtbildes und dann solange warten wie nötig. Mit ROMTabellen kann ich leider noch nicht umgehen (das wird der nächste Versuch). Für den Timer gilt das gleiche. Mein erstes "Projekt" war die Umkonvertierung des Testprogramms für den AT90S8515-8PC auf den ATtiny26. Und dann habe ich versucht mit möglichst vielen mir bekannten Befehlen ein funktionierendes Programm zu basteln. OK, das wär's dann erstmal wieder. MFG Mister L. Laffa
Gewöhn dir vielleicht gleich mal an, sowas:
>ldi eins,219
etwas besser lesbar zu schreiben, denn sonst musst du später irgendwann
mal immer erst das Datenblatt zu rate ziehen, wenn du dein Proggi
verstehen oder verändern willst und dann alle Bits deines Programmes
wieder dekodieren musst.
Deine Zeile sieht so doch z.B. viel lesbarer aus, obwohl es 100%
dasselbe ist (atmel macht es in den datenblättern doch auch so):
ldi eins, (1<<PB7)|(1<<PB6)|(1<<PB4)|(1<<PB3)|(1<<PB1)|(1<<PB0)
und dann vielleicht sogar noch gleich den Bits eigene Namen (am Anfang
des Programms) verpassen mit:
.equ LED_gruen = PB0
.equ LED_gelb = PB1
.equ LED_rot = PB2
und so weiter...
Damit kannst du schreiben:
ldi eins, (1<<LED_gruen)|(1<<LED_gelb)|(1<<LED_rot) ...
So kannst du alle Bit- und Registerbezeichnungen des Datenblatts direkt
benutzen, TOV0, PB1, COM1B0 usw.
cu joern
Hallo Jörn, und schon wieder was dazugelernt. Das mit der direkten Addressierung der einzelnen Bits kannte ich bisher auch noch nicht. Aber ich habe mich auch noch nicht durch das komplette Datenblatt durchgearbeitet. Aber ich werd's mir für mein nächstes Projekt merken. MFG Mister L. Laffa
Macht Atmel doch in jedem Beispiel in jedem Kapitel so?! cu joern
Hast Du schonmal die Forum-Suche verwendet? http://www.mikrocontroller.net/forum/read-1-316821.html http://www.mikrocontroller.net/forum/read-1-287524.html http://www.mikrocontroller.net/forum/read-1-287524.html http://www.mikrocontroller.net/forum/read-1-280914.html
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.