Forum: Mikrocontroller und Digitale Elektronik Ampelschaltung mit atmel ATtiny26


von Mister L. Laffa (Gast)


Angehängte Dateien:

Lesenswert?

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

von Wolfram (Gast)


Lesenswert?

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

von Mister L. Laffa (Gast)


Lesenswert?

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

von Mister L. Laffa (Gast)


Lesenswert?

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

von Jörn-H. G. (joern_g)


Lesenswert?

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

von Mister L. Laffa (Gast)


Lesenswert?

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

von Jörn-H. G. (joern_g)


Lesenswert?

Macht Atmel doch in jedem Beispiel in jedem Kapitel so?!

cu joern

von Profi (Gast)


Lesenswert?


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.