Hey liebe Community,
Ich möchte gerne eine sehr einfach Ampelschaltung programmieren.
Dabei soll bei rot PORTC 3 gesetzt sein, bei gelb PORTC 2 und bei grün
PORTC 1. Außerdem soll wenn die Ampel wenn sie grün ist blinken und
zwischen dem Wechseln ein delay von 1 sec. also 1000ms haben. Das ganze
sollte dann in etwa wie im Gif aussehen.(https://gifyu.com/image/dr49)
Leider habe ich nur das absolute Grundwissen weshalb es sehr nett wäre
wenn mir einer von ihnen helfen könnte.
Ich denke, dass du dazu die Grundlagen der Mikrocontroller
Programmierung lernen musst.
Falls es um AVR geht:
http://stefanfrings.de/mikrocontroller_buch/index.html
Falls es um STM32 geht:
http://stefanfrings.de/mikrocontroller_buch2/index.html
Wir helfen Dir dann gerne bei konkreten Fragen. Dazu musst du aber
deinen Schaltplan und das aktuelle Programm vorzeigen.
Natürlich steht es Dir auch frei, jemand dafür zu bezahlen, die Arbeit
für dich zu erledigen. Dann musst du das hier aber klar kommunizieren.
>das absolute Grundwissen
Aus was besteht das Grundwissen?
Auf welcher Hardware willst Du programmieren (lassen)?
Kannst Du löten?
Fragen über Fragen.
Wo sind die Antworten?
Das ganze ist rein theoretisch ich habe nicht vor irgendetwas zu
löten...
Ich kann etwas Java programmieren weswegen Schleifen, delay variablen
usw. nichts neues für mich sind. Generell scheint ist die Aufgabe nicht
sehr schwer nur verstehe ich nicht auf welche Werte ich PORTC jetzt
genau setzen muss.
Matteo Benito schrieb:> Das ganze ist rein theoretisch ich habe nicht vor irgendetwas zu> löten...
Trotzdem wirst du dich mit der Hardware auseinander setzen müssen.
Praktisch sind Mikrocontroller - soetwas meinst du vermutlich, wenn du
von PORTC sprichst vermutlich - verschieden. Mindestens die
Mikrocontrollerfamilien unterscheiden sich deutlich voneinandern.
Gemeinsam haben sie einige Grundprinzipien, aber wenn du dich sogar auf
die Millisekunde genau mit der Zeit schon festgelegt hast, kommt es für
die Umsetzung sogar auf die Taktfrequenz des Controllers an, auch
theoretisch.
Rot = PortC3 = 2^3 = 8
Gelb = PortC2 = 2^2 = 4
Grün = PortC1 = 2^1 = 2
Einfach die Bitwerte der jeweils aktiven Farben addieren und die Summe
auf PortC ausgeben. Zwischen die einzelnen Ampelphasen ein Delay-Aufruf
mit der gewünschten Anzeige-Zeit.
Sicher kannst du auch Dezimalzahlen verwenden, aber nicht so, wie du
geschrieben hast.
Lerne den Zusammenhang zwischen IO Pins und Bits.
Lerne, was Binärzahlen sind.
Lerne, die man zwischen dem binären und dem dezimalen Zahlensystem
umrechnet.
Lerne, wie man einzelne Bits mit Operatoren setzt und löscht.
Lerne, wie man mehrere Ausgänge gleichzeitig auf HIGH oder LOW schaltet,
indem man Bit mit Operatoren kombiniert.
All das ist in dem Tutorial erklärt, dass ich Dir oben empfohlen habe.
Wenn diese Beiden Anganben wahr sind:
1
PORTC = 2; //Ampel ist gelb
2
PORTC = 1; //Ampel ist grün
Dann kann das nicht wahr sein:
1
PORTC = 3; //Ampel ist rot
Denn bei 3 würde die Ampel grün-gelb leuchten. Das hat was mit den Bits
im Byte zu tun.
Matteo Benito schrieb:> Kann ich die Pins auch mit dezimal Werten setzten(in Codeblocks)?> Hab das ganze jetzt mal so gemacht:
Warum sollte das funktionieren.
Statt über Dezimalzahlen nachzudenken, solltest du dich besser mit
Binärzahlen auseinander setzten. Sonst wird es nur unübersichtlich.
Deine Portzuweisungen sind Mist, weil Rot 8 und nicht 3.
Matteo Benito schrieb:> soll ich dann einfach PORTC = 0 setzen?
nur wenn du ALLES an Port C löschen willst, kann aber auch mal sein das
was am Port C angeschlossen ist was nicht ausgehen darf, was wäre dann
da zu tun?
Matteo Benito schrieb:> soll ich dann einfach PORTC = 0 setzen?
Wenn die LEDs so angeschlossen sind, dass sie bei LOW Pegel aus sind,
dann: Ja
Ich habe nicht umsonst geschrieben, dass du deinen Schaltplan zeigen
sollst.
Matteo Benito schrieb:> Das ganze ist rein theoretisch ich habe nicht vor irgendetwas zu> löten...Stefan ⛄ F. schrieb:> Ich habe nicht umsonst geschrieben, dass du deinen Schaltplan zeigen> sollst.
den wird es wohl nie geben und wenn dann nur theoretisch!
Welchen AVR hast Du eigentlich genommen? Bei den größeren AVRs (ATMega32
z.B. und aufwärts) ist standardmäßig JTAG auf PortC aktiviert und belegt
dort ein paar Pins. Wenn man die verwenden möchte, muß das erst
abgeschaltet werden.
Matteo Benito schrieb:> DDRB = 0xFF;> PORTB = 0x03;
Wenn du "theoretisch" Port C nutzen möchtest, musst natürlich nicht auch
Port C als Ausgang konfigurieren. Und natürlicher kannst du auch gleich
auf grün schalten. Vorausgesetzt du beginnst in Deiner Theorie bei 1
anstatt wie üblich bei 0. Dann hätest du nämlich direkt auf grün-gelb
geschaltet.
Ben B. schrieb:> Welchen AVR hast Du eigentlich genommen? ....Matteo Benito schrieb:> Das ganze ist rein theoretisch ich habe nicht vor irgendetwas zu> löten...
@theokrates
Das hast du sicher nett gemeint, aber ich habe das Gefühl, dass der TO
mit dieser Aufgabe etwas lernen soll. Die (fast) fertige Lösung vor zu
sagen bringt ihm leider gar nichts bei.
Stefan ⛄ F. schrieb:> Rolf M. schrieb:>> Ich glaube, er hatte mit dem Code ein andere Ziel.>> Wäre schön, wenn sich der TO mal dazu äußert.
Hausaufgabe, was sonst?
Andreas B. schrieb:> Hausaufgabe, was sonst?
wenn wir im Netz Hausaufgaben für andere lösen fällt das irgendwann auf
uns zurück, wenn wir mal Spezialisten mit Gesellenbrief oder Diplom
brauchen, die sind dann nichts mehr wert!
Joachim B. schrieb:> ällt das irgendwann auf uns zurück
Freue dich schon einmal auf dein nächstes Auto.
Ich habe beschlossen, meine alte Kiste so lange zu reparieren, bis es
nicht mehr geht.
Stefan ⛄ F. schrieb:> Freue dich schon einmal auf dein nächstes Auto.
weiss ich doch, musste ich schon beim letzten Auto feststellen, es
wurden solange teure Teile auf meine Kosten getauscht bis ich beim
Motorsteuergerät streikte, 2k€. dann doch lieber einen neuen
Gebrauchten.
Stefan ⛄ F. schrieb:> Ich habe beschlossen, meine alte Kiste so lange zu reparieren, bis es> nicht mehr geht.
Dito, letztens wenigstens den Fernschalter im Lenkrad fürs Radio, da kam
ich noch hin, war aber auch eine Schweinerei, erst mini Torx
Schraubendreher kaufen, sich dann verrenken und dann zwischen 2
Ersatzteile wählen, eines zu 30€ gekauft, eines zu 90€ ignoriert.
Das 30€ Teil hatte rote LEDs, das 90€ Teil blaue LEDs, OK die hätte ich
ja noch umlöten können, aber die R Matrix für die Funktionen war auf dem
PCB anders verschaltet, klappte also nicht, der Reinigungsversuch vorher
mit ISO, Spüli klappte auch nicht, aber das Polieren der Goldkontakte
mit trockenem Q-Tipp auf dem PCB klappte dann!
30€ für den Müll, aber immerhin 60€ gespart, abzüglich Torx
Schraubendreher.