Forum: Mikrocontroller und Digitale Elektronik Atmega 8 Programmieren für Anfänger (Taster und LED)


von Hendrik (Gast)


Lesenswert?

Hallo liebes mikrocontroller Forum,

Ich bin Schüler und auf dem Gebiet Programmieren ein totaler anfänger. 
Ich besitze den ATmega 8 und  habe mir für ein Schulprojekt einen 
seriellen Programmieradapter gebaut. Ich hab den Atmega 8 auch schon 
erfolgreich beschrieben und gelöscht.

Mein Problem:

Ich habe das AVRStudio4 installiert und möchte so eine Art Programm 
(.hex) schreiben:

Drücke Taster1 = LED 1 für x Sekunden an.
pause (x Sekunden)
Led2 für x Sekunden an.
Ende

Drücke Taster2 = LED 2 für x Sekunden an.
pause (x Sekunden)
Led3 für x Sekunden an.
Ende

Nach Ende Bereitschaft für Tastendruck

Ich habe mir schon einige AVR-Tutorials angeschaut leider steige ich 
nicht so richtig durch wie ich meine Fuktionen auf den ATmel bekomme und 
ob ich sonst noch etwas beachten muss (fuse-bits etc.)
Es wäre echt super, wenn ihr mir mein beschriebenes "Programm" einmal 
für den ATmega 8 passend umsetzen könntet, ich würde es dann für mich 
abändern.
Also im Grunde Tastendruck > Kanal 1 für x Sekunden an.

Ich hoffe ihr könnt mir weiter helfen.
Gruß Hendrik

von Simon A. (testnetz)


Lesenswert?

Hi
Was hast du denn für Vorkenntnisse zum Thema Programmiersprachen?

von Axel H. (mf-futzi)


Lesenswert?

Hallo Hendrik,

bei Anfrage nach einem fertigen Programm reagieren die Forumsteilnehmer 
(verständlicherweise) immer sehr empfindlich. Sinn und Zweck ist 
grundsätzlich, selber zu verstehen, was in einem Programm abläuft.

Ausserdem ist auch immer zuerst Eigeninitive gefordert. Wenn Du etwas 
nicht verstehst, wird Dir aber mit Sicherheit hier im Forum geholfen.

Entscheide Dich zuerst für eine Programiersprache:
Assembler
C
Basic
Für eine Entscheidungshilfe suche zuerst hier im Forum. Das Thema wurde 
schon sehr oft behandelt.

Steige dann immer tiefer ein. Du wirst nach kurzer Zeit merken, dass 
schon ein Tastendrücken seine Tücken hat (Prellen).


Aus eigener Erfahrung kann ich sagen, dass dieses Forum nahezu 
unerschöpflich ist.

von Simon A. (testnetz)


Lesenswert?

Axel Hüser schrieb:
> Hallo Simon,

Du meinst wohl Hendrik oder? :D

von Axel H. (mf-futzi)


Lesenswert?

Ja, sorry

von Karl H. (kbuchegg)


Lesenswert?

Dein "Projekt", so einfach es auch klingt, ist gar nicht so einfach. 
Zumindest dann nicht, wenn man es richtig machen will.

> ch habe mir schon einige AVR-Tutorials angeschaut leider
> steige ich nicht so richtig durch wie ich meine Fuktionen
> auf den ATmel bekomme

Das könnte ein Hinweis darauf sein, dass du dich zu sehr auf deine 
Aufgabenstellung versteifst.
Wenn du das AVR-Turial durchmachst, dann dauert es da immerhin 14 
Lektionen, bis es endlich soweit ist, so etwas zu realisieren. OK, alle 
Lektionen sind nicht notwendig, aber umgekehrt ist das Thema schwierig 
genug, dass es bis dorthin warten musste.

Du solltest dich meiner Meinung nach in die Hände dieses Tutorials 
begeben und es von Anfang an durchmachen, egal ob das jeweils 
besprochene dir für deine jetzige Aufgabenstellung als notwendig 
vorkommt oder nicht. Wenn du dann beim Thema "Taster und Entprellen" 
angekommen bist, hast du das nötige Rüstzeug um dann auch zu verstehen, 
was da abgeht.

Ich würde dir diese Dinge durchaus in Assembler ans Herz legen, denn 
wenn du Anfänger bist, wirst du auch mit C dastehen wie der Ochs vorm 
Tor. Parallel zu deinen Assembler-Studien auf dem AVR kannst du ja mal 
anfangen, mit einem handelsüblichen C-Lehrbuch dir auf dem PC(!) die 
ersten Schritte in C beizubringen. Das ist sowieso sinnvoll. Denn beides 
gleichzeitig, C und die Spezialitäten die eine µC so mit sich bringt, 
auf einmal lernen zu wollen, ist schon sehr viel auf einmal. Da dann 
lieber C in einer Form, welches du auf einem PC unmittelbar einsetzen 
kannst. Die üblichen Bücher leisten das ohne Probleme.


> Es wäre echt super, wenn ihr mir mein beschriebenes "Programm"
> einmal für den ATmega 8 passend umsetzen könntet, ich würde es
> dann für mich abändern.

Davon halten die meisten hier nicht sehr viel. Wenn du schon mit den 
Tutorien Schwierigkeiten hast, dann wirst du auch eine saubere Lösung 
deines Problems nicht verstehen.

von Hendrik (Gast)


Lesenswert?

Danke für die schnellen Antworten ich denke ich muss mich noch ein wenig 
in die Thematik einlesen.

Habe ein Beispiel für ATTINY 2313 gefunden (elsniwiki):
1
#define F_CPU 1000000UL
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
6
int main (void)
7
{
8
9
// ****************************************************
10
// Könnt ihr mir sagen was die obrigen Zeilen auf sich haben und wie sie
11
// bei dem Atmega8 aussehen müssten? Ich würde dieses Beispiel gerne zum
12
// Test auf dem Atmega laufen lassen. 
13
// ****************************************************
14
15
        // Pin 1 von Port A (PA1) als Ausgang schalten
16
        DDRA = (1 << PA1);
17
18
        // Endlosschleife
19
        for (;;) {
20
                PORTA |= (1 << PA1);  // bit im Portregister auf 1 setzen => LED leuchtet
21
                _delay_ms(500);    // eine halbe Sekunde warten
22
23
                PORTA &= ~(1 << PA1); // bit im Portregister auf 0 setzen => LED aus
24
                _delay_ms(500);    // eine halbe Sekunde warten
Den Rest verstehe ich einigermaßen.
Gruß Hendrik

von Eumel (Gast)


Lesenswert?

Das ist in C geschrieben. Nimm ASM.
Lies dir das Turotial Schritt für Schritt durch und dann stell KONKRETE 
fragen.
Nicht: ich hab das alles nicht verstanden, blicke nicht durch etc...
Da kann dir doch keiner helfen.
Wenn du Hilfe beim lösen deiner Problem brauchst musst du erstmal das 
Problem anständig beschreiben, dann helfen wir dir alle sicherlich gerne 
:)

von Peter D. (peda)


Lesenswert?

Hendrik schrieb:
> Drücke Taster1 = LED 1 für x Sekunden an.
> pause (x Sekunden)
> Led2 für x Sekunden an.
> Ende
>
> Drücke Taster2 = LED 2 für x Sekunden an.
> pause (x Sekunden)
> Led3 für x Sekunden an.
> Ende

Das ist nicht eindeutig.

1.
Darf Taste2 unabhängig von Taste1 gedrückt werden oder erst, nachdem 
Task1 abgelaufen ist?

2.
Was ist, wenn eine oder beide Tasten immer gedrückt gehalten werden?

3.
Ist das korrekt, daß beide Tasks LED2 gemeinsam benutzen?


Peter

von Hendrik (Gast)


Lesenswert?

Danke für eure Tipps ich werde mich jetzt noch mal in Ruhe an die 
Tutorials setzen (vielleicht in den Winterferien ;]) und wie von Karl 
Heinz vorgeschlagen mit Assembler anfangen und kann mich bei Fragen dann 
ja noch mal melden.

Danke an euch alle hier im Forum.

Gruß Hendrik

von Paul Baumann (Gast)


Lesenswert?

Hier ist auch noch ein gutes Tutorial zum Erlernen der 
Assembler-Programmierung:
http://www.avr-asm-tutorial.net/avr_de/index.html

MfG Paul

von Peter ⛄ W. (Firma: Huddel und Brassel Ltd.) (jaffel) Benutzerseite


Lesenswert?

Der Atmega8 hat keinen PORT_A_, der ATtiny2313 dagegen schon. Immer 
erst in's Datenblatt gucken !

Abgeaenderter Quelltext. Sollte funktionieren.

Quelle: elsniwiki
1
// -----------------------------------------
2
// Blinken einer LED an PIN 15 (PB1)
3
// fuer ATmega8
4
// -----------------------------------------
5
6
// 1MHz ist Default-Takt (Fuse-Bits nicht manipuliert
7
#define F_CPU 1000000UL
8
9
#include <avr/io.h>
10
#include <util/delay.h>
11
12
13
int main (void)
14
{
15
        // Pin 1 von Port B (PB1) als Ausgang schalten
16
        DDRB = (1 << PB1);
17
18
        // Endlosschleife
19
        for (;;) {
20
                PORTB |= (1 << PB1);  // bit im Portregister auf 1 setzen => LED leuchtet
21
                _delay_ms(500);    // eine halbe Sekunde warten
22
23
                PORTA &= ~(1 << PA1); // bit im Portregister auf 0 setzen => LED aus
24
                _delay_ms(500);    // eine halbe Sekunde warten
25
        }
26
}

von Düsendieb (Gast)


Lesenswert?


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.