Forum: Mikrocontroller und Digitale Elektronik Codeschloss-Wie umsetzen?


von oZe (Gast)


Lesenswert?

Hallo Community!
Vorneweg: ich bin absoluter Anfänger in Sachen Mikrocontroller ;-)

Ich würde gerne mit einem ATtiny2313 ein Codeschloss realisieren. Dazu 
würde ich gernen einen Code wie z.b. "lang-kurz-kurz-lang-lang" nutzen. 
Das heißt ich würde beispielsweise an PB0 einen Taster anklemmen der 
diesen auf 5V high setzt für eine bestimmte Zeit (Kurz = kürzer als 1 
sekunde, lang= min. 1 Sekunde).

Wenn der Code richtig eingegeben wurde würde ich gerne z.b. PB1 von low 
auf High setzen und somit über einen Transistor ein Relais anziehen 
lassen.

Mein eigentliches Problem ist die Umsetzung in Software. Ich kenne mich 
mit Assembler absolut nicht aus dafür aber mit C. Ich wäre euch sehr 
dankbar wenn mir jemand ein Codebeispiel senden könnte wie man sowas 
umsetzen kann.
Danke schon mal ;-)

Mfg

oZe

von Matthias (Gast)


Lesenswert?

Bau ne Schrittkette mit swich-case auf.

So. nu gib dir Mühe ;-)

von oZe (Gast)


Angehängte Dateien:

Lesenswert?

Als kurzer Nachtrag hier noch mal ein Schaltplan wie ich mir das 
vorstelle. Anstelle des Relais hab ich jetzt einfach mal kurz eine LED 
genommen weil ich kein passendes Relais in meiner Bauteileliste gefunden 
habe.

von oZe (Gast)


Lesenswert?

Ja das ist mir schon klar. Nur wie mess ich die Zeit die PB0 auf high 
steht? Ich hab einfach zu wenig erfahrung mit den Microcontrollern...

von Matthias (Gast)


Lesenswert?

Und hier kann dir keiner die Erfahrung geben, die muss man immer selbst 
sammeln.

Nimm nen Timer zum Messen...

von fubu1000 (Gast)


Lesenswert?

hallo,
sry aber so geht das nit mit den taster einfach an den uC pin.
du musst dem pin schon einen definierten pegel geben, ansonsten zappelt 
der vor sich her.
z.B. nen wiederstand vom pin auf GND.
genauso wie bei der LED da solltest auch den strom mittels wiederstand 
begrenzen.
gruss

von Tipper (Gast)


Lesenswert?

Noch ein paar Tips:

-Nimm nen ATTiny oder ATMega, dann kannst du Dir den Quarz und die 
beiden Kondensatoren sparen.
-Mach die LED nicht an den Emitter sondern an den Kollektor gegen +Vcc. 
So kannst du auch dann z.B. mal ein 12V Relais schalten (mit 
Freilaufdiode!)
-Das Schaltbild sieht nach Target aus. Auch darin gibt es sicher ein 
Symbol für GND, den man an jede Stelle wo GND gebraucht wird hinsetzen 
kann, so wird der Schaltplan wesentlich übersichtlicher

.

von Peter D. (peda)


Lesenswert?

Entprellen + Lang/Kurz-Erkennung:

Beitrag "Universelle Tastenabfrage"


Peter

von oZe (Gast)


Lesenswert?

Wow das hilft mir ja schon mal wesentlich mehr weiter. Danke Jungs!

Die Beiden Kondensatoren am Quarz werde ich dann entfernen und nen 
ATTiny2313 nehmen. Den uC Pin für den Eingang werde ich dann mit 10 kOhm 
an Masse hängen und und per Taster dann auf Vcc ziehen.

Und "Ja" ich benutze Target ;-) Danke für den Tipp mit GND.

Mfg


oZe

von Markus L. (lucky79)


Lesenswert?

@oZe: bei dem Taster kannst du dir den Widerstand auch komplett sparen 
indem du den intrnen PullUp vom Port benutzt und den dann mittels Taster 
nach GND ziehst - is ja wurscht ob du nun 0 oder 1 wertest...

Wenn du ein exaktes Timing brauchst, kommst um den Quarz nicht herum, 
aber für deine Zwecke gehts auch ohne.

Grüße
Markus

von oZe (Gast)


Lesenswert?

Ganz ohne Quarz? Ich dachte eigentlich das der AtTiny2313 das quarz 
benötigt um einen Takt zu bekommen oder kann der controller selber einen 
Takt erzeugen und benötigt keinen externen Taktgeber?

von Volker (Gast)


Lesenswert?

Der ATtiny2313 hat einen eingebauten Oszillator, brauchst also keinen 
Quarz.

Das steht aber auch alles im Datenblatt.

von Winfried (Gast)


Lesenswert?

Das ist doch ein wunderschönes und überschaubares Anfängerprojekt. 
Wünsch dir viel Erfolg. Setz dich auf jeden Fall erstmal ein paar 
Stunden hin und studier das Datenblatt, ein paar Tutorials und ein 
Programme von anderen.

Tipp: Bau dir eine Art Soft-Timer. Im Timerinterrrupt zählst du z.B. 
alle 10ms ein Register eins höher. Dieses Register setzt du bei 
Tastendruck in der Hauptroutine auf 0 und fragst den Wert ab, wenn der 
Taster losgelassen wurde. Der Wert gibt die Zeit in n * 10ms an. In 
deiner Interrupt-Routine musst du natürlich dafür sorgen, dass das 
Register nicht überläuft, also beim Wert 0xFF nicht weiter incrementiert 
wird.

Hier mal ein Simple-Programme mit etwas Beschreibung, wovon du bestimmt 
ein wenig kopieren kannst:

http://www.wikidorf.de/reintechnisch/Inhalt/AVRProjekt-9V-LED-Lampe-II

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.