Taster an Atmega8 -> Problem

Gast #236172
Lesenswert?
• ▲
▼
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
Persönliche Seite #236173
Lesenswert?
• ▲
▼
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
}
Gast #236175
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.