Forum: Mikrocontroller und Digitale Elektronik Ampelschaltung


von Marc Suhler (Gast)


Lesenswert?

Guten Abend,

im Zuge meines momentan noch andauernden Fachabis, habe ich als
Aufgabenstellung die Realisierung einer Ampelschaltung mithilfe eines
Mikrokontrollers aufgedrückt bekommen.
Im Internet habe ich zahlreiche vorgefertigte Schaltungen gefunden,
jedoch wollen die Ersteller meistens für den Quellcode PIC Geld sehen.

Hat eventuellen jemand hier schonmal ein solches oder ähnliches Projekt
realisiert, sodass ich mich daran etwas orientieren kann?

Grüsse
Marc

von TravelRec. (Gast)


Lesenswert?

Haste denn schon ´ne Vorstellung, welchen Controller Du nehmen willst?
Wiviele Ampeln sollen den gleichzeitig gesteuert werden?

von Peter D. (peda)


Lesenswert?

Für nen AVR (ATtiny26) kannste den Code für lau haben:


http://www.mikrocontroller.net/forum/read-1-316159.html#316664

http://www.mikrocontroller.net/attachment.php/313478/flasher.zip


Peter

P.S.:
Vielleicht wollen die PIC-ser Geld haben, weil das Proggen damit so
mühsam ist :-)

von Rahul (Gast)


Lesenswert?

@Peter:*lol*

von TravelRec. (Gast)


Lesenswert?

Peter, Du bist viel zu gnädig, laß doch die Leute auch mal ein wenig
selber denken ;-)

Der mit den PIC´sern war gut!

von Marc Suhler (Gast)


Lesenswert?

Wäre jetzt nur mal eine Idee, die sich aus dem was ich gelesen habe
ergibt:

4 Ampeln (2* Auto und 2* Fussgänger z.B.)
Eventuell Taster für Fussgänger, akustisches Signal für Blinde
PIC12F629 als Controller

Habe ich jetzt mal so einigen Beispielen entnommen, die ich gefunden
habe. Konktrete Aufgabenauflagen (Wieviele Ampeln, welche Funktionen)
für das Projekt selber habe ich nicht bekommen. Es macht sich natürlich
immer besser "etwas" mehr Funktionen zu bieten als nur eine simple
Ampel mit Basisfunktion.

von crazy horse (Gast)


Lesenswert?


von Rahul (Gast)


Lesenswert?

Ne simple Ampel ist doch schon richtig langweilig (siehe Crazy Horse's
Link).
Interessant wird es, eine komplette Strasse mit mehreren Kreuzungen,
Nachtschaltung, Feuerwehr/Rettungswagenschaltung.

Allerdings erhöht die Verwendung eines PICs die Aufgabe ungemein...

von Peter D. (peda)


Lesenswert?

@TravelRec.

so gnädig ist das garnicht.

Ich denke mal, man muß ne Abiarbeit auch erklären können und den
Scheduler zu verstehen dürfte schon ne Abileistung sein (ich bin für
Fragen offen).

Und diese Leistung lohnt sich aber auch, man wird nämlich mit einer
ungeahnten Flexibilität und Leistungsfähigkeit der Ampelsteuerung
belohnt, die keine andere Methode bietet.


Peter


P.S.:
Für Fußgängertasten gibt ja auch was von mir.

von Marc Suhler (Gast)


Lesenswert?

Das wichtigste habe ich leider komplett vergessen:
Die Programmierung sollte in Assembler geschehen, da ich von C wenig
bis garkeine Ahnung habe.

von peter dannegger (Gast)


Lesenswert?

In Assembler ist so ein Sheduler nicht so einfach.

Da würde ich zu einer Statemachine raten, die jede Sekunde um 1 hoch
zählt (z.B. im Timerinterrupt).

Sehr einfach ist eine Statemachine in Assembler aufm 8051 mit dem
CJNE-Befehl:
1
statemachine:
2
        cjne    r7, #5, st1
3
                             ; mache was nach 5s
4
st1:
5
        cjne    r7, #15, st2
6
                             ; mache was nach 15s
7
st2:
8
9
        cjne    r7, #21, st3
10
                             ; mache was nach 21s
11
st3:
12
        cjne    r7, #28, st4
13
                             ; mache was nach 28s
14
        mov r7, #0           ; und wieder von vorne
15
st4:
16
        ret

Die Statemachine wird dann jede Sekunde aufgerufen.
Und für mehrere unabhängige Ampeln ruft man dann mehrere solcher
Statemachines auf.


Peter

von Manos (Gast)


Lesenswert?

"Das wichtigste habe ich leider komplett vergessen:
Die Programmierung sollte in Assembler geschehen, da ich von C wenig
bis garkeine Ahnung habe."

Höhö... und Du denkst, in Assembler wird die Sache für Dich einfacher
zu programmieren oder hast Du davon viel Ahnung?

von Rahul (Gast)


Lesenswert?

Naja, PICs kann man in Assembler besser programmieren...

von Marc Suhler (Gast)


Lesenswert?

@Manos
Meine Erfahrung in C geht gegen Null, also warum sollte ich mich dann
damit abquälen?
ASM ist mir da doch deutlich bekannter.

von peter dannegger (Gast)


Lesenswert?

@Marc,

die Frage wäre, warum gerade PIC ?

Ist das der einzige, dessen Assembler Du kennst oder ist das ne Vorgabe
?

Und wie gut kennst Du dessen Assembler, d.h hast Du schon mal ein
richtiges Projekt damit gemacht ?

Und wie groß ist der Zeitrahmen (es sollten schon erheblich mehr als 2
Wochen sein) ?

Hast Du überhaupt mal was mit MCs gemacht ?


Peter

von Marc Suhler (Gast)


Lesenswert?

@Peter

Genau dort liegen meine Probleme, ich habe bis jetzt noch absolut
garnichts mit MCs gemacht.
Meine Erfahrungen im ASM Bereich beschränken sich auf den 8086.
Auf den PIC bin ich nur gestossen, da er bei einigen Projekten
verwendet wird, die ich bei meiner Recherche gefunden habe.

Die 2 Wochen sind auch aus meiner Sicht absolut problematisch, aber ich
kann es leider nicht ändern.

Marc

von Peter D. (peda)


Lesenswert?

Mit 2 Wochen meinte ich eigentlich einen Zeitraum, in dem es keinesfalls
im Selbststudium zu schaffen ist.

Ist in etwa vergleichbar, wie in 14 Tagen Russisch lernen zu wollen.

Du bräuchtest jemanden, der Dir einen 14-Tage Crashkurs (8h/Tag) gibt.


Ich vermute mal, Du hast 6 Monate dafür Zeit gehabt.
Diesen Zeitraum würde ich als angemessen betrachten, wenn Du alles
alleine machen mustest.
Gabs denn überhaupt keine begleitenden Kurse dazu ?


Peter

von Marc Suhler (Gast)


Lesenswert?

Wenn ich 6 Monate Zeit gehabt hätte, würde ich mir nich so einen Stress
machen müssen.

Wir haben eine kurze Einführung in 8086 erhalten (60min), was mir aber
reichlich wenig bringt bei diesem Thema.

Dann wird wohl mein einziger Ausweg sein, irgendwo einen MC bespielt zu
kaufen, auszulesen, disassemblieren, kommentieren und so tun als ob es
meine Kreation ist.

von Peter D. (peda)


Lesenswert?

Stimmt, 60min sind so gut wie nichts.

Und ich bleibe dabei, ohne Vorkenntnisse ist das ne Aufgabe für 6
Monate.

Kopfschüttel.


Peter

von Steffen (Gast)


Lesenswert?

Was ist denn das für eine Schule?

Normalerweise wird in der Schule nichts als Projekt arbeit verlangt was
nicht ausführlich behandelt wurde, auch scheint mir der Zeitraum von 2
Wochen falsch, wir hatten bei unseren IT Projekten immer 2-3 Monate
Zeit, gearbeitet wurde mit dem was in der Schule eingeführt war (8051)
und wer wollte durfte auch etwas anderes nehmen.

Sehr seltsam

von ,,,,,, (Gast)


Lesenswert?

8086 - alten PC/Laptop nehmen .... LPT-Port - ansteuern ....

---> Diodenmatrix 8 Schaltzustände... je Bit nur eine Kanal

1 - alles ist Rot
2 - Richtung A Gelb
3 - Richtung A Grün
4 - Richtung A Grün Gelb
1 - alles Rot
5 - Richtung B Gelb
6 - Richtung B Grün
7 - Richtung B Grün Gelb
1 - alles Rot

.... bleibt noch
8. - Gelb blinken

Fußgänger
-- Rot mit Zentralrot
-- via Grün der Hauptrichtung

Linksabbieger - müssen aufpassen...
LOWTEC...


ansonsten einige Gatter usw. dazu

von Karl H. (kbuchegg)


Lesenswert?

@ Marc

Wenn Du so in Zeitnot bist, dann solltest Du versuchen
die Aufgabenstellung so weit wie moeglich zu vereinfachen.

Nichts Fussgaengerampel, nichts Nebenfahrbahn, nichts Nachtschaltung,
nichts Hand-Eingriffsmoeglichkeit. Eine simple, banale
Ampel fuer 2 Fahrtrichtungen.

Dann brauchst du schleunigst einen MC. Oder wenns geht nimm
einen PC und haeng die Hardware von ,,,,, dran). Vom PC aus
ist das dann ein Kinderspiel. Hab sowas in den Wihnachtsferien
mit meinem Sohn (13) gemacht. Ein paar LED an den Parallel-
Port. In Excel hab ich ihm eine kleine VBA Anwendung gemacht,
die im Sekundentakt einefach Excel Zellen an den LPT Port
legt (ueber DLPortIO). Nach einigem Spielen mit dem Ding
hab ich ihm auch die Aufgabe: Ampelstuerung gegeben. In 10 Minuten
hatte er die.

Mit einem MC ist das nicht ganz so einfach, da du dich erst mal
in die Programmierung einarbeiten musst. Ich wuerde die den PIC
ausreden und einen ATMEL einreden, ganz einfach aus dem Grund
weil es hier auf der SIte in prima Tutorial fuer diese Prozessoren
gibt. Fang mal damit an eine LED blinken zu lassen. Wenn Du
das mit einem Timer schaffst (und so schwer ist das nicht), dann
ist der Rest fuer eine minimalistische Ampel auch nicht schwer.

Ueber einen Timer und Software Vorteiler eine Funktion machen,
die alle 1 Sekunde aufgerufen wird. In dieser Funktion wird
ein Wert aus einer Tabelle geholt und auf einen Port ausgegeben.
Tha. Und das wars dann schon. Der Rest ist einfach nur mehr
die richtigen Werte in die Tabelle eintragen, sodass die richtigen
Lichter leuchten. Wie gesagt: diesen Teil der Aufgabe schaffte
ein 13-jaehriger in 10 Minuten nachdem er das Prinzip begriffen
hatte.

von ,,,,,, (Gast)


Lesenswert?

P.S. unter einem alten Dos kann man das Programm via Batchfile und eCHO
auf LPT1 kopieren ;-)

und mit CHOISE sogar eingaben abfragen...

von 3 Newton (Gast)


Lesenswert?

Um allen etwas zu helfen sollte vielleicht einmal ganz genau die
Aufgabenstellung bekannt sein. Die hast Du doch sicher schriftlich,
nor? Wie lautet sie genau? Und was sind die Bewertungskriterien bzw.
was willst Du für eine Note und was ist dafür nötig? 15 (1+) Punkte
wenn irgendeine "Ampelschaltung mit einem MC" dasteht? Da fällt mir
das hier ein:
http://www.wintermeyer.de/2003/06/27/barometer_und_wolkenkratzer.html
Also mal schön die Handkurbel-Ampel bauen und einen MC verwenden um ein
akustisches Signal für Blinde zu generieren ;-))))
Nu aber im Ernst, gegeben Du sollst wirklich nur eine Ampelschaltung
mit einem MC wie auch immer bauen: 2 sich kreuzende Straßen, 2 Ampeln
pro Bahn, ein paar ist grün, bleibt es eine Weile, wird gelb und rot,
es vergeht eine Sekunde, das andere Paar wird grün und so weiter...
Wenn das hardwaremäßig steht kannst Du immer noch was reinbauen.
Wie Du anfängst? Damit hier:
www.rowalt.de/mc
und dazu kaufst Du das hier:
http://cgi.ebay.de/Atmel-AVR-AtMega-System-m-128x64-Grafik-LCD-GLCD_W0QQitemZ5878953575QQcategoryZ10662QQrdZ1QQcmdZViewItem
und lädst Dir Bascom aus dem Netz. Programmieren kannst Du es genauso
wie ich es oben geschrieben habe, ist dann halt rein sequenziell. Das
dürfte in etwa einer Woche zu machen sein. Bedenke dass Du das Teil ja
auch noch bauen musst!

3N

von Frank (Gast)


Lesenswert?

http://www.josepino.com/pic_projects/index.pl?traffic_light.jpc

da gibts auch ne Ampel mit nem PIC und sogar Ohne. Wenn man den Hexcode
ins Brenntool von Sprut einliest bekommt man auch ein Assemblerlisting.
Da der Code nicht gar so kompliziert ist kann man diesen Weg hier
schonmal beschreiten um an den Code zu kommen.

bye

Frank

von 3 Newton (Gast)


Lesenswert?

Zudem ist das eine tolle Möglichkeit gar kein Abi wegen Betrugsversuches
zu bekommen.

3N

von Marc Suhler (Gast)


Lesenswert?

@3 Newton
Die Aufgabenstellung ist sehr allgemein gehalten. Ampesteuerung
realisiert mithilfe eines MC. (Nicht wörtlich, aber sinngemäß)

Bewertet wird die Dokumentation, (Projektdoku wie man sie auch in
vielen IT Ausbildungsberufen zum Abschluss anfertigen muss) und die
Präsentation des Ganzen.
Die Präsentation setzt sich zusammen aus der Vorstellung der
Projektorganisation, Erklärung der technischen Gegebenheiten und
Erklärung des Quellcodes.
Inzwischen bin ich auch von den ganzen Features ab, die mir in den Sinn
gekommen sind und werde erstmal kleine Brötchen backen...


Danke schonmal für die vielen Posts, da habe ich erstmal einiges zu
lesen und zu bestellen.

von Wegstabenverbuchsler (Gast)


Lesenswert?

EIne "einfachste" Ampelsteuerung läßt sich im Grunde mit ein paar
simplen Programmier-Anweisungen realisieren. Es handelt sich ja hier um
simple Bitmuster und einen Takt (z.B. 1 Sekunde), der regelmäßig das
nächste Bitmuster läd.. ...

Der Vereinfachung halber wird angenommen, daß es sich um2 kreuzende
Strassen handelt, und die beiden gegenüberliegenden Ampeln exakt das
gleiche anzeigen. Dann ergibt sich folgendes:

port1_bit0=Strasse1_Auto_rot
port1_bit1=Strasse1_Auto_gelb
port1_bit2=Strasse1_Auto_grün
port1_bit3=Strasse1_Fussgaenger_rot
port1_bit4=Strasse1_Fussgaenger_grün

port2_bit0=Strasse2_Auto_rot
port2_bit1=Strasse2_Auto_gelb
port2_bit2=Strasse2_Auto_grün
port2_bit3=Strasse2_Fussgaenger_rot
port2_bit4=Strasse2_Fussgaenger_grün

nun malst du dir ein Taktdiagramm auf, und denkst scharf drüber nach
welche Lampe wann leuchten soll.

Das geht möglicherweise beim Einschalten los mit
xxx11111 xxx00000
xxx00000 xxx11111
xxx11111 xxx00000
xxx00000 xxx11111
xxx11111 xxx00000
xxx00000 xxx11111

und dann können die Ampeln "loslegen":
erst mal den gesamten Verkehr sperren für 3 Sekunden:
xxx01001 xxxx01001
xxx01001 xxxx01001
xxx01001 xxxx01001

jetzt willkürlich eine Fahrtrichtung losfahren lassen
(überleg selbst was du mit den Fussgängern machst, ich nehm jetzt nur
mal die Autos von 1 Richtung)

xxx--011                    rot und gelb gemeinsam
xxx--100                    jetzt endlich grün
...                           20 Sekunden bitmuster halten (Grünphase)
xxx--100                    jetzt endlich grün zuende
xxx--010                    die Ampel wird gelb..
xxx--001                    und nun ist wieder rot




PS: HINWEIS: Versuche erst das Prinzip in "klarsprache" zu verstehen
und zu formulieren. Es ist wesentlich einfacher, einen Algorithmus in
"Umgangssprache" zu formulieren, und ihn dann in eine Assembler. oder
Hoch(Programmier) Sparache zu gießen. Den umgangssprachlichen Teil fügst
du dann einfach als Kommentar mit ein, und fertig ist das Programm



allgemeine Syntax:
==================
for (loopcounter=startwert) to (loopccounter=endwert)
 do (statement)


Umgangssprachliche "Programmiersprache":
================================================
initialisiere Schleifenzähler mit Startwert
SCHLEIFENBEGINN:
prüfe, ob Schleifenzähler schon den Endwert hat
   falls nein:
   Mache <irgendwas>
   springe zum Schleifenbeginn



(Fantasie-)Assembler:
=====================
ld xyz,!abxc
loop:
   add bxy, 0xabc
   mv czb, (!abc)
djnz loop

von Wegstabenverbuchsler (Gast)


Lesenswert?

PS: Kauf die im "Modellbaubahn" Laden (das große blaue C hat sowas
glaub ich auch) ein paar Ampeln mit eingebauten LED. Frickel das ganze
an einen Mikrocontroler dran (leider ist die "Butterfy" Cirquit
Cellar Ciontest Aktion schon ausverkauft) und schon hast du ein
hübersche buntes etwas was blinkt und prima zur Vorführung geeignet ist

von Wegstabenverbuchsler (Gast)


Lesenswert?

@Marc
steht das Programm schon?

von Marc Suhler (Gast)


Angehängte Dateien:

Lesenswert?

@Wegstabenverbuchsler

Ich fluche noch immer häufig und viel...
Habe meine Ansprüche schon deutlich reduziert und werde mich definitiv
auf eine simple Ampel beschränken.
Habe mal etwas angehängt, was ich mir so zusammengestückelt und
kommentiert habe.
Sind noch einige Sachen unklar, vielleicht kann da jemand nochmal etwas
Licht ins Dunkle bringen.

PS: Mein nächstes Problem kommt auch schon auf mich zu, der Programmer
PICSTART+ den ich hier liegen habe, ist noch R4 und läuft deshalb nicht
mit der aktuellen IDE von Microchip, da die Firmware zu alt ist...

von Haiko (Gast)


Lesenswert?

Hallo,

Also ich sehe das jetzt richtig ??
Du sollst für die Schule ein Ampelprojekt bauen, hast " keine Ahnung
" und hast sogut wie keine Hardware und es soll nichts kosten..

Ich habe als Einstieg in die µc die Picaxe Chips genommen, weil es bei
mir ähnlich war. Kaum zeit und nichts wissen... bin darauf gekommen
weil es dafür eine Graphische Programieroberflöche gibt..

Schau doch mal dort ins Forum
http://www.roboter-teile.de/modules.php?name=Forums&file=viewforum&f=7

Und mach ein Post auf, dort wird dir geholfen. Das Programieren der
Bauteile ist simpel du brauchst kein Programmer.

Gruß  Haiko

von Marc Suhler (Gast)


Lesenswert?

Nunja, die PICs habe ich hier schon liegen und ein Rechner mit Win98
wird sich bestimmt noch finden, auf dem ich die alte IDE von Microchip
laufen lassen kann.

Wird schon werden, noch bin ich guter Dinge. :-)

von Marc Suhler (Gast)


Angehängte Dateien:

Lesenswert?

Ich bins nochmal, je länger ich heute im Laufe des Tages über mein
erstes Listing nachgedacht habe, desto mehr hat sich der Verdacht
erhärtet, dass es totaler Mist ist. :-)
(12F629 hat kein PORTA/B, sondern wie ich der Doku entnommen habe GPIO,
MOV kann so direkt nicht funktionieren und nochn paar Kleinigkeiten)

Habe mal eine neue Version angehängt, wäre nett, wenn irgendjemand sich
diese mal anschauen könnte und mir vielleicht ein paar Tips gibt.
Habe ja leider, da der Brenner momentan noch nicht läuft keine
Möglichkeit zu testen.

... Immerhin kann ich es ohne Fehler assemblieren.

von Wegstabenverbuchsler (Gast)


Lesenswert?

@Marc Suhler
ich versteh noch nicht ganz was die Idee bei deinem programm ist.

Versuch erstmal deine Funktionen zu Modularisieren und in
Umgangssprache nieder zu schreiben. Und dann guckst du dir ein paar
Register aus in denen du das laufen lässt.


Den Rahmen hab ich dir doch schon genannt. Wenn du die Einschaltphase
(Initialblinken und anschließend gesamtverkehr sperren) überspringen
möchtest bleibt doch nur noch übrig:

xxx--011                    rot und gelb gemeinsam
xxx--100                    jetzt endlich grün
...                           20 Sekunden bitmuster halten (Grünphase)
xxx--100                    jetzt endlich grün zuende
xxx--010                    die Ampel wird gelb..
xxx--001                    und nun ist wieder rot

Ich hab jetzt mal die Fussgänger auch mit aufgenommen

also in "umgangssprachlichen" Algorithmus:

Widerhole bis zum Sankt-Nimmerleins-Tag:
   gib Bitmuster "xxx01011" auf ein Port aus    ; Auto ro-ge, FG rot
   warte 1 Sekunde
   gib Bitmuster "xxx01100" auf ein Port aus    ; Auto GRÜN, FG rot
   warte 20 Sekunden
   gib Bitmuster "xxx01010" auf ein Port aus    ; Auto gelb, FG rot
   warte 1 Sekunde
   gib Bitmuster "xxx01010" auf ein Port aus    ; Auto gelb, FG rot
   warte 1 Sekunde
   gib Bitmuster "xxx01001" auf ein port aus    ; Auto rot, FG rot
   warte 1 Sekunde
   gib Bitmuster "xxx10001" auf ein port aus    ; Auto rot, FG grün
   warte 20 Sekunden
   gib Bitmuster "xxx01001" auf ein port aus    ; Auto rot, FG rot
   warte 1 Sekunde
springe nach Oben zum Schleifenanfang

Du brauchst da nun nur 2 Ports nehmen, und die Signale Zeitversetzt für
de andere Fahrtrichtung daneben zu legen, schon hast du eine Kreuzung.

von Wegstabenverbuchsler (Gast)


Lesenswert?

"Habe ja leider, da der Brenner momentan noch nicht läuft keine
Möglichkeit zu testen."

LAss dein Zeugs euinfach im Simulator laufen, da brauchst du keine
echte Hardware für.

von Wegstabenverbuchsler (Gast)


Lesenswert?

Hups, ich seh garde daß ich die gelbphase für die Autos 2 mal drin habe.
ein mal kann natürlich raus incl der zugehörigen Pause...

von Marc Suhler (Gast)


Lesenswert?

Mir ist schon klar, was du mir sagen willst, nur hapert es bei mir noch
ein bisschen mit den Grundsätzlichen Dingen.

Im Prinzip würde ich ja nur folgendes setzen müssen, um mal an deinen
letzten Post anzuknüpfen:

Ungefähr so sollte es aussehen:

 movlw   B'00001011'
 movwf   TRISIO
 CALL Unteprogramm für Warte Zeit xy
 movlw   B'00001100'
 movwf   TRISIO
 CALL Unteprogramm für Warte Zeit xy

usw. Mir ist die Programmtechnische Umsetzung noch ein "wenig"
unklar.

von Rahul (Gast)


Lesenswert?

Soweit ich PIC-Assembler in Erinnerung habe, beschreibt TRIS die
Datenrichtung, aber nicht den Port-Pegel. Ich kann aber auch
falschliegen.

von Marc Suhler (Gast)


Angehängte Dateien:

Lesenswert?

@Rahul
Du hast recht, war Mist.

Die LEDs leuchten zumindest schonmal, nur bei der Schleife tue ich mich
noch etwas schwer.
Er springt in die Schleife aber kommt nicht wieder raus, irgendwie
mache ich da im Moment noch nen kleinen Denkfehler.
Habe nochmal den aktuellen Quelltext angehängt.

von Profi (Gast)


Lesenswert?

Leuchten die Leds in real oder Simulator?

Du hast ja schonmal das gröbste geschafft.

Wohin soll die Schleife springen, wenn sie "nicht wieder raus"
springt? Das ist ja der Sinn einer Endlosschleife, dass sie nicht mehr
rausspringt.

Oder verstehe ich was falsch? Was erwartest Du? Was siehst Du ?
Was ist nicht so wie Du es erwartest?

Wenn Du mal ein wenig sicherer bist, würde ich das Programm stark
vereinfachen, nämlich mit einer Tabelle (Stichwort RETL / RETLW), in
der das Bitmuster und die jeweilige Wartezeit (1 oder 20 s) / Bedingung
(FG-Anforderung) gespeichert sind.

Das ist schon eine sehr einfache Statemachine.


Also:
#define tabsize 20 //Anzahl der verschiedenen Zustände
#define forever 1  //true
char Bitmuster[tabsize]={
0b0000101
......},
Wartezeit[tabsize]={1,1,1,20,1,1,1....};

main(void){
do{
  index=0;
  do{
    porta=bitmuster[index]; //gebe Bitmuster[index]auf die LEDs
    delay(wartezeit[index]);
    index+=1;
    }
    while index<tabsize;
  }
  while forever;
}

Du siehst schon die Vorteile einer Hochsprache, den obingen Code
könntest Du fast schon compilieren...

Aber ihn in Asm zu übertragen, sollte auch kein großes Problem
darstellen.
Wenn doch, lasse es uns wissen, wir helfen dann sofort.

Evtl. lohnt es sich, das ganze auf dem PC auszuprobieren
z.B. mit dem kostenlosen DOS-TurboPascal oder Turbo-C von Borland.
Wenn es dann das macht, was man will, auf den µC übertragen.

von Marc Suhler (Gast)


Lesenswert?

Die LEDs leuchten erstmal nur am Simulator.

Die Schleife, die momentan endlos läuft, sollte nur eine bestimmt Zeit
laufen.
Hierbei lasse ich einfach runter zählen und wenn 0 erreicht ist, soll
wieder zum Aufrufer der Unterschleife gesprungen werden.
Dies klappt jedoch momentan nicht und er zählt und zählt und zählt.

von Profi (Gast)


Lesenswert?

Bitte ausführlicher antworten, welche Schleife ist gemeint, vermute mal
die Warteschleife250ms.
Zählt er die Variablen loops und loops2 herunter??

Da diese ineinander verschachtelt sind wird der Mittelteil 250*6=1500
mal durchlaufen, das dauert im Simulator bedeutend länger als 250ms.

Versuche zuerst mal mit
movlw   D'2'          ; 2 ms Pause
im Singlestep durchzumachen.
nachdem er zum 2. Mal den
        decfsz  loops, F       ; Dekrementieren
ausgeführt hat, sollte er den  goto Wai  skippen und den  retlw 0
ausführen.

von Marc Suhler (Gast)


Lesenswert?

Hatte im Simulator extra die Ausführungsgeschwindigkeit auf Schnell
gestellt, werde dem aber trotzdem nochmal nachgehen.

@Rahul
Um nochmal auf die TRISIO Geschichte zurück zu kommen.
So müsste es korrekt aussehen:

MOVLW B'0000001'  ; Pin7 wird geschaltet
MOVWF GPIO

Beitrag #6765205 wurde von einem Moderator gelöscht.
Beitrag #6767985 wurde von einem Moderator gelöscht.
Beitrag #6768037 wurde von einem Moderator gelöscht.
Beitrag #6768063 wurde von einem Moderator gelöscht.
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.