Forum: Compiler & IDEs Atmega128 Tasten Ansteuern


von Saber (Gast)


Lesenswert?

Hi all,

zu aller erst wünsche ich allen frohe Ostern.

Ich hab mir ein Graphik Display zugelegt und möchte über zwei tasten 
bilder auf dem display anzeigen. Die pics kann ich schon ausgeben am 
display nur weis ich nicht wie der code für die tasten ausschauen soll. 
Ich möchte das einfach nur so haben das wenn ich auf taste 1 auf port D1 
drücke das mir der atmega128 das gewünschte bild zeigt

daweil schaut der code so aus, vieleicht kann mir ja wer verraten was 
ich tun muss.

PS.: Das ist das display 
http://www.shop.display3000.com/pi12/pi2/pd43.html
nur im handbuch steht kein wort darüber wie mann die tasten ansteuert


#include <stdio.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <util/delay.h>
#include <math.h>
#include <avr/pgmspace.h>
#define LCD_DDR DDRB

void delay_ms(unsigned int period);
#include <glcd-Display3000-211.h>
extern const prog_uint8_t Font1[], Font2[];

//Include graphics files (if any)
#include "nasa256c.h"
#include "bild2.h"
#include "bild3.h"

extern const prog_uint16_t  *Bitmap;



int main(void)
{
  LCD_Init();
  delay_ms(1000);
  while(1)
  {



                  Orientation = Portrait;
    LCD_Bitmap_256high(0, 0, 131, 175, Nasa256c, Table_Nasa256c, true);
    delay_ms(4000);



#//Hier sollte das bild angezeigt werden wenn ich auf taste 1 PD1 drücke


                  Orientation = Portrait;
    LCD_Bitmap_256high(0, 0, 131, 175, Bild2, Table_Bild2,  true);
    delay_ms(4000);


#//Hier sollte das bild angezeigt werden wenn ich auf taste 2 PD6 drücke

    Orientation = Portrait;
    LCD_Bitmap_256high(0, 0, 131, 175, Bild3, Table_Bild3, true);
    delay_ms(4000);

    }
  return 0;
}


{
  for(unsigned int i=0; i<=period; i++)
    _delay_ms(1);
}

von Peter D. (peda)


Lesenswert?


von Saber (Gast)


Lesenswert?

Hi peda

danke für denn link aber ich begreif da null :(
achso ja ich benötige ja keinen short oder long tastendruck hab ja für 
jeden aufruf eine einzelne taste

wenn es dir möglich ist könntest du mir das idioten sicher beschreiben 
:)

mfg Saber

von Roland P. (pram)


Lesenswert?

Aaalso, weil heute Ostern ist...

1. Taster kann nicht ansteuern, sondern nur abfragen :-)
2. Muss man den Prozessor sagen wo die Taster dran hängen, dazu muss man
die entsprechenden Pins auf Eingang/Pullup konfigurieren.
1
DDRD = 0; // alle Pins an PortD auf Eingang, 
2
// diese Zeile kann man sich sparen, 
3
// sofern man DDRD nach dem Reset nicht angefasst hat
4
5
PORTD |= (1 << PD1) | (1 << PD6); // Pullup für PD1+PD6
6
7
...
8
while(1) 
9
{
10
   if (PIND & (1 <<PD1))
11
   {
12
       // Taster NICHT gedrückt
13
   } else {
14
       // Taster gedrückt
15
   }
16
}

3. Wirst du recht schnell fest stellen, dass obiger Code zwar 
funktioniert, aber nicht optimal ist, Stichwort Entprellung und 
Wiederholung. Bei gedrückter Taste wird das Bild z.B. immer wieder 
gezeichnet.

Evtl hilft dir obiges Beispiel, das Prinzip zu verstehen wie man einen 
Port abfragt und du dich somit besser in die Materie der Entprellung 
einzuarbeiten.
Such einfach mal nach "Entprellen", es gibt da verschiedene 
Codeschnipsel, manche evtl leichter verständlich wie Peda's aber dafür 
mit anderen Nachteilen.
Auch ein Blick ins GCC-Tut ist nicht verkehrt:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Tasten_und_Schalter

Wünsche noch allen Frohe Ostern
Roland

von Saber (Gast)


Lesenswert?

Danke Danke Danke Roland

hast mir sehr geholfen damit ich dein einstieg in tasten entprellen 
verstehe.

Frohe Ostern

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.