mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ampelschaltung mit atmel ATtiny26


Autor: Mister L. Laffa (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mister L. Laffa (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mister L. Laffa (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörn-h. G. (joern_g)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mister L. Laffa (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörn-h. G. (joern_g)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Macht Atmel doch in jedem Beispiel in jedem Kapitel so?!

cu joern

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

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.