www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT2560 Zeichen auf LCD Display beim Drücken von Joystick


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Jochen (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo,
ich bin dabei ein Snake Spiel(Architektur), das ich vor einiger Zeit 
einmal am PC programmiert habe, auf den AT2560 (AVR Einsteigerset) zu 
konvertieren.

Bei kleinen hanwerklichen Versuchen muss ich jedoch ein Problem 
feststellen.
Zunächst einmal einen Balken, der sich solange nach rechts bewegt, wie 
der Joystick gedrückt ist. Jedoch "flackert " der Baclken am rechten 
Rand, die Bewegung ist nicht sauber. Woran könnte das liegen?
Schönen Dank,
Jochen

#define F_CPU 16000000
#include <avr/io.h>
 

#include <avr/io.h>
#include "Auto.h"
int main(void)
{ Auto a;
  a.init();
  a.refresh();   
 
   
  DDRB=0xff;
  DDRK=0x00; // Port-K komplett auf EINGANG
   
  PORTK= 0xFF; // alle Pull-Up Widerstände aktivieren

PORTK= 0xFF; 
 
   
    while(1)
    {
    while(  (PINK&0b01000000)==0){
    
     a.right();
  } 
  }   

}

Auto.cpp
 
#include <avr/io.h>
#include <string.h>   
#include <MK3_2560_LCD.h>
#include <math.h>
#include <util/delay.h> 
#include "auto.h"
 


void Auto::left()
{   
  x = x-1;
} 
void Auto::right()
{   
  x = x+1;
   
  refresh();
} 

void Auto::refresh()
{unsigned int n;
   
  
  y=0;
   
  for(int i=0;i<10;i++)
  {
    MK3_LCD_PIXEL_AT(x+i,y,MODE_SET);
    MK3_LCD_PIXEL_AT(x+i,y+1,MODE_SET); 
  }
      _delay_ms(1000);
}
void Auto::init()
{
  char led_wert=0;
  char x,y;

  MK3_INIT_LCD();          // init des LCD
  
  MK3_LCD_CLEAR();        // LCD loeschen
  MK3_LCD_LIGHT(true);      // beleuchtung einschalten
  
   
  MK3_LCD_SETCURSOR(0,0);
}


Autor: Jochen (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ist der Code so unübersichtlich;)?

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Jochen schrieb:
> Ist der Code so unübersichtlich;)?

Nö.

Aber hier weiß keiner, was passiert bzw. was MK3_LCD_PIXEL_AT macht,
wenn in
    MK3_LCD_PIXEL_AT(x+i,y,MODE_SET);
eine x-Position ausserhalb des zulässigen Bereichs angegeben wird.

Autor: Jochen (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Zum Ansteuern des LCD verwende ich den Treiber
von http://www.mikrocontroller-4u.de 06 = Grafik-LCD-Treiber
In der Schleife der Funktion refresh() in meinem Code zeichne ich zwei 
übereinander liegende Linien. Beim Rechtsklick des Joysticks
trifft die Bedingung while(  (PINK&0b01000000)==0) aus der Main Routine 
zu und es wird die Funktion right auf der Instanz a aufgerufen. Das 
führt dazu, dass die x Korrdinate erhöht wird und die oben beschriebene 
Funktion refresh aufgerufen wird. Diese zeichnet in Abhängigkeit vom 
x-wert die Linien erneut.

Autor: Jochen (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Die Bewegung ist wie gesagt nicht sauber und bei langem gedrückthalten 
des Joysticks nach rechts flackert es auch leicht, besonders am rechten 
Rand der Linie.

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net