www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Taster an Atmega8 -> Problem


Autor: Arno (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohje, da kommt wohl einer von der PC-C-Programmierung.

1. Mach mal Pullups an die Eingänge.

und hier mein vorgeschlagener code
#include <avr/io.h>
#include <stdio.h>
#include <inttypes.h>

int main(void)
{
  DDRD = 0xff;      
  PORTD = 0xff;     
    
  DDRC = 0x00;    
  PORTC = 0x00;      

  
while(1){

  if (!(PINC & (1<<PINC2))) 
    {
    PORTD = 0x00;       
    }


   //  return(0);     // return wird nicht benötigt
}

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nach der if schleife natürlich noch ein }

Autor: Arno (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Arno (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.