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
Hi Was hast du denn für Vorkenntnisse zum Thema Programmiersprachen?
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.
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.
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
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 :)
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
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
Hier ist auch noch ein gutes Tutorial zum Erlernen der Assembler-Programmierung: http://www.avr-asm-tutorial.net/avr_de/index.html MfG Paul
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 | }
|
Da gibt auch ein paar Beispiele: http://www.mikrocontroller.net/articles/Absolute_Beginner-AVR_Steckbrettprojekte
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.