Hallo ich habe gerade erst angefangen mit der AVR programmierung. das board was ich mir gebaut habe funktioniert. die leds gehen und die taster auch. habe ich mit nem Assemblerprogramm getestet. Aber in WinAvr bekomme ich das Tasterproblem nicht in den griff. die wollen einfach nicht gehen. hier zum anfang erstmal das c-programm: #include <avr/io.h> #include <stdio.h> #include <inttypes.h> int main(void) { DDRD = 0xff; //Port wird als ausgang definiert PORTD = 0xff; //Port wird auf High gelegt, leds leuchten nicht DDRC = 0x00; //Port wird eingang PORTC = 0x00; //Port wird low gesetzt und die internen pull ups sind aus if ( (PINC & (1<<PINC2)) ) // Tasterport C , wenn pin 0 auf low geht dann führe was aus { PORTD = 0x00; //lege port d auf low und damit leuchten die leds } return(0); } und hier das assemblerprogramm was einigermassen funktioniert: .include "m8def.inc" ldi r16, 0xFF out DDRD, r16 ;Port B durch Ausgabe von 0xFF ins ;Richtungsregister DDRB als Ausgang konfigurieren ldi r16, 0x00 out DDRC, r16 ;Port D durch Ausgabe von 0x00 ins ;Richtungsregister DDRD als Eingang konfigurieren loop: in r16, PINC ;an Port D anliegende Werte (Taster) nach r16 einlesen out PORTD, r16 ;Inhalt von r16 an Port B ausgeben rjmp loop ;Sprung zu "loop:" -> Endlosschleife Meine Taster sind low aktiv, also wenn ich den drücke geht daer port auf low?? sehe ich das so richtig? Kann mir jemand bitte ein richtiges beispiel programm schicken oder sagen wo mein fehler ist. ach einen habe ich noch: habe auch ein problem mit der delay zeit. wollte mal ne blink led programmieren, aber trotz _delay_(1000) blinkte die led sehr schnell. woran kann das liegen? thx arno
Ohje, da kommt wohl einer von der PC-C-Programmierung. 1. Mach mal Pullups an die Eingänge. und hier mein vorgeschlagener code
1 | #include <avr/io.h> |
2 | #include <stdio.h> |
3 | #include <inttypes.h> |
4 | |
5 | int main(void) |
6 | {
|
7 | DDRD = 0xff; |
8 | PORTD = 0xff; |
9 | |
10 | DDRC = 0x00; |
11 | PORTC = 0x00; |
12 | |
13 | |
14 | while(1){ |
15 | |
16 | if (!(PINC & (1<<PINC2))) |
17 | {
|
18 | PORTD = 0x00; |
19 | }
|
20 | |
21 | |
22 | // return(0); // return wird nicht benötigt
|
23 | }
|
Hallo und danke für deine Hilfe. nur leider geht es immer noch nicht, die internen pullups bruache ich nicht, habe die pull up widerstände schon am taster dran. wie das beispiel hier auf der seite im tutorial. aktive low heißt das :-) nur verstehe ich das nicht, wenn ich die "Tastatur" an meine C51 Prozie dran baue ( programmiere schon seit ca 6 Monaten assembler) funktionieren die super. am atmega8, wenn er mit assembler, programiert ist leuchten die elds die eigentlich mit dem taster geschaltet werden immer leicht. man könnte fast sagen sie flackern. wenn ich dann den taster schließe dann gehen die leds aus. auch wenn ich den port wechsel geht auch es nicht also taster an d und les an c. thx arno
Hallo, ok programm funzt super. habe den fehler gefunden. die doppelten widerstände waren der fehler. habe jetzt die taster direkt an den AVR und massu gelegt. geht super. thx für deine Hilfe
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.