Forum: Mikrocontroller und Digitale Elektronik 1st Projekt LED Lauflicht Steuerung mit ATtyni2313


von Yos G. (yo_ga)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich bin neu hier, möchte in die Mikrocontroller-Welt reinschnuppern.
Eletronisches Basiswissen ist vorhanden, mit C-Code habe ich bisher noch 
keine Erfahrung gesammelt.

Ich möchte nun mit hilfe des ATtyni2313 eine Lauflichtsteuerung basteln. 
Folgende Funktionen werden gewünscht:

Lauflicht beginnt nach betätigen eines Tasters und endet nach einer 
vordefinierten Zeit (z.B. 10 sec.), sollte der Taster noch betätigt sein 
verlängert sich die Funktion um weitere 10 sec.

Über einen Codierschalter (Hex Variante) soll das Lauflicht-Muster 
veränderbar sein.

Für die ansteuerung der LEDs würde ich den B-Port (8 Kanal Lauflicht) 
vorschlagen, für den Codierschalter würde ich den D-Port nutzen.

Mit VB wäre das kein Problem für mich, mit C habe ich bisher noch nichts 
programmiert, könnt ihr mich dabei unterstützen?

Zur Verdeutlichung der gewünschten Funktionen, habe ich eine 
entsprechende Excel Datei in den Anhang gepackt (ich hoffe das ist ok).


Liebe Grüße yo_ga

von Peter D. (peda)


Lesenswert?


von Yos G. (yo_ga)


Lesenswert?

Hallo,

Danke erstmal für die schnelle Antwort. Scheint genau das zu sein was 
ich mir wünsche. Ich würde gerne die Routine verstehen aber momentan 
raucht mein Kopf, C-Code ist ganz neu für mich.

Wenn ich den Mikrocontroller einschalte, in welcher reihenfolge werden 
die Routinen abgearbeitet, läuft das alles parallel? Was für ein Vorteil 
ergibt sich, wenn die Tabelle in den Flash geladen wird.

Nach dem einschalten/aufwachen, wird das zuletzt gewählte LED-Muster 
wiedergegeben oder welches?

Eine Tastenentprellung benötige ich eigentlich nicht, bei mir soll das 
Lauflicht über den MP3_soundmodul MSM2 (ELV) gesteuert werden, d.h. wenn 
hier eine MP3 abgespielt wird (teilweise sehr kurze Stücke < 10sec.) 
dann soll das Lauflicht arbeiten, mind. 10 sec max. bis ende des MP3. 
dafür würde ich das "Xreset" Signal dieser Schaltung abgreifen. Solange 
ein Mp3 File abgespielt wird habe ich am "Xreset" 3,3V sonst 0 V

Die LEDs möchte ich gerne direkt an den Ausgangsports des 
Mikrocontrollers anschließen, habe irgendwo gelesen das dieser 20mA 
liefert, ist das richtig?

OK, muss mich jetzt hinlegen. Vorab schon mal vielen Dank für die 
Antworten.

von Karl H. (kbuchegg)


Lesenswert?

Yos Garcia schrieb:

> ich mir wünsche. Ich würde gerne die Routine verstehen aber momentan
> raucht mein Kopf, C-Code ist ganz neu für mich.

Dann besorg dir als erstes ein C-Buch. Ohne systematische Führung durch 
die Sprache bist du, so wie viele andere, verloren.

> Wenn ich den Mikrocontroller einschalte, in welcher reihenfolge werden
> die Routinen abgearbeitet,

ein C Programm beginnt immer bei der Funktion, die main() heißt.

> läuft das alles parallel?

Nein.

> Was für ein Vorteil
> ergibt sich, wenn die Tabelle in den Flash geladen wird.

Speicherersparnis im SRAM.

Aber allen Ernstes: Das ist schon etwas für Fortgeschrittenere (genauso 
wie dein Projekt). Am Anfang solltest du all diese Feinheiten ignorieren 
und erst mal zusehen, dass der Wagen ins rollen kommt. Formel 1 fahren 
kommt später.

Erst mal brauchst du Grundkenntnisse in C. Ohne geht gar nichts, wenn du 
C machen willst.

Und dein Projekt mit MP3 und dergleichen solltest du auch erst mal zur 
Seite legen. Los geht es mit ein paar LED an einem Port, die erst mal 
zum Leuchten gebracht werden wollen.
AVR-GCC-Tutorial

von Yos G. (yo_ga)


Lesenswert?

Hallo, ich bin es wieder.

Das mit dem Buch ist eine gute Idee, werde mir eins als Sommerlektüre 
besorgen, könnt ihr da was empfehlen?

Im Moment geht es mir allerdings darum dieses Lauflicht zu 
verwirklichen. Ursprünglich hatte ich vor einen Dezimalzähler zu 
verwenden, doch hier muss man sich von vorne herein auf ein 
Lauflichtmuster festlegen, welches so ohne weiteres nicht verändert 
werden kann.

Der Code von "Peda" erfüllt zu > 90% genau meine Anforderungen, gerne 
würde ich damit etwas herum experimentieren. Wie kriege ich es in 
AVR-Studio 5.1 so zum laufen, das ich die Funktionen simulieren kann?

Wenn ich die Dateien lade steht mir kein Simulationsbutton zur 
Verfügung, erst wenn ich ein Projekt erstelle sind die Schaltflächen 
vorhanden, aber irgendwie krieg ich das nicht richtig zum laufen. Könnt 
ihr mir etwas "Starthilfe" geben?


Liebe Grüße yo_ga

von M. M. (blackcow)


Lesenswert?

> ich mir wünsche. Ich würde gerne die Routine verstehen aber momentan
> raucht mein Kopf, C-Code ist ganz neu für mich.

lern Assembly  XD

von Yos G. (yo_ga)


Lesenswert?

Na, du bist ja eine große Hilfe...

von Yos G. (yo_ga)


Lesenswert?

Also, wie gesagt musste ich in AVR-Studio ein Projekt anlegen um das 
ganze simulieren zu können, dadurch wurde eine zusätzliche yo_ga.c Datei 
generiert mit folgendem Inhalt:
1
/*
2
 * yo_ga.c
3
 *
4
 * Created: 21.03.2012 21:56:59
5
 *  Author: yo_ga
6
 */ 
7
8
#include <avr/io.h>
9
10
int main(void)
11
{
12
    while(1)
13
    {
14
        //TODO:: Please write your application code 
15
    }
16
}


Wenn ich die Simulation starte und mir die I/O Ports anschaue, dann sehe 
ich aber keine Änderungen, eigentlich hatte ich hier das Laufmuster 
erwartet, auch der „Cycle Counter“  des Prozessors zählt nicht hoch, 
wenn ich aber auf Pause drücke zeigt mir der „Cycle Counter“ einige 
Millionen Durchläufe an, ergo muss im Hintergrund irgendetwas gelaufen 
sein. Kann es sein, dass der Simulator des AVR-Studios während der 
Abarbeitung der Routine die Änderungen an den Ausgangsports nicht 
anzeigt?

@ Peda
Ich habe mich mit deinem Code etwas beschäftigt, wenn ich es richtig 
sehe werden die LEDs an PD0…7 und der Taster an PB0 angeschlossen, 
richtig?

In deiner Beschreibung gibst du drei Modi an: Aktiv, Idle und Power-Down
Aktiv und Power-Down sind klar aber wann tritt Idle ein?
Ist es nicht so, dass nach dem Einschalten das ausgewählte Pattern bis 
zum ausschalten in eins durchläuft?

Für meine Zwecke benötige ich folgende Modifizierungen:
Ein-/Ausschalten und Wechsel des Musters wie bereits von dir vorgesehen 
über eine Taste, allerdings benötige ich solange der Mikroprozessor 
aktiv ist einen High-Pegel an irgend einen Port, beim Power-Down einen 
Low-Pegel.

Des weiteren soll das Lauflicht nur dann arbeiten solange an einem 
(Input-) Port ein High-Pegel anliegt, wechselt das Signal auf Low, soll 
das Lauflicht für eine einstellbare Zeit noch weiterlaufen und dann 
anhalten (alle LEDs aus), was dann Idle wäre.

Da meine C Kenntnisse noch recht bescheiden sind, wäre ich für jegliche 
Unterstützung sehr dankbar.


Liebe Grüße yo_ga

von krymel2k10 (Gast)


Lesenswert?

...hab zwar gar keine Ahnung von AVR, aber als Entwickler der mit C und 
anderen Sprachen Erfahrung hat, würde ich mal vermuten, dass Du einfach 
auf "Run" geklickt hast und irgendwann auf Pause. In anderen 
IDE's/Sprachen/Debuggern ist es so, dass man, wenn man jeden einzelnen 
Schritt nachverfolgen will, einen Breakpoint setzen muss, wo er anhalten 
soll. Ansonsten führt er einfach die Loop aus und du siehst erst was 
wenn das Programm beendet ist.. (oder anhält: Pause)

Außerdem ist das ne Endless Loop die deine CPU ohne sowas wie nen 
sleep() call (kA ob es das in AVR gibt) so dauer-auslasten sollte, das 
es auch sein kann dass du deswegen keine Laufzeit-Infos bekommst.

Schreib mal ne primitive Rechenoperation rein.

int i = 0;
while (true) {
    i++;
}

Ganz easy. Was passiert dann?

Such mal sowas wie nen sleep() wenn es das gibt, mach mel nen sleep() 
mit 20ms pro Loop-Interatiom.

Außerdem: kA ob es bei AVR sowas wie "Debug Sessions" gibt. Aber vl. 
siehst Du einfach nix, weil Du das Programm nicht im Debug-Modus 
gestartet hast...

Nur mal so, weil grad keiner Antwortet ;) Vl. hilfts ja..

von krymel2k10 (Gast)


Lesenswert?

Äh ja, wenn es sowas wie Breakpoints/Haltepunkte gibt, setrzt einen auf 
die Zeile wo i++; steht. Versuch das Programm im Debug-Modus zu starten. 
Dann sollte er dahin springen und anhalten. Dann einfach auf "Next Step" 
oder sowas klicen. Sollte es als Button geben... kA ob AVR sowas hat... 
;)

von krymel2k10 (Gast)


Lesenswert?

Oh schau mal, ich glaube das trifft auch auf Deinen Fall zu:

    Beitrag "C-Code mit AVR-Studio-Simulator debuggen möglich?"

von krymel2k10 (Gast)


Lesenswert?

Und als Buchempfehlungen:

    - 
http://www.amazon.de/AVR-Mikrocontroller-programmieren-Selbstbauprojekte-ATtiny13-ATmega32/dp/3645650199/ref=sr_1_22?s=books&ie=UTF8&qid=1332378624&sr=1-22

    - 
http://www.amazon.de/C-Programmieren-Anfang-Helmut-Erlenk%C3%B6tter/dp/3499600749/ref=pd_cp_b_1


Ich glaube Du brauchst beide. Ein reines C-Buch hilft Dir sicher nicht. 
Denn da steht nix über AVR. AVR ist sicher ein wenig anders, sonst gäb's 
auch keinen speziellen AVR GCC wie ich grade gelesen habe.

Das C-Buch ist dann eher für die Hintergründe und das AVR-Buch für die 
Praxis.

BTW: Schau mal beim lokalen CCC in Deiner Umgebung vorbei. Dort findest 
Du vl. ein paar Leute die mal was mit AVR gemacht haben und die Dir 
persönlich vl. Starthilfe geben können...

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.