mikrocontroller.net

Forum: Compiler & IDEs LCD-Display "in eine neue Seite springen lassen"


Autor: Verzweiflung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, alle die noch Online sind.

Ich versuche seit 2 Stunden auf meinem Display eine zweite Seite, also 
das es einen Text "Mutti fraegt Kind" anzeigt. Dann soll es so 10sec 
warten und den text "antwortet" schreiben.

Wie muss ich den Code änderen?

//
// Anpassungen im makefile:
//    ATMega8 => MCU=atmega8 im makefile einstellen
//    lcd-routines.c in SRC = ... Zeile anhängen
//
#include <avr/io.h>
#include "lcd-routines.h"

int main(void)
{
    lcd_init();

    lcd_string("Mutti fraegt Kind");

    set_cursor(0,2);

    lcd_string("1:");


    while(10);


  {
    }
    return 1;
}


Oder muss ich in einer der anderen Datein noch etwas ändern?

Als Programmiersoftware hab ich AVR-Studio
es ist ein 2x 16 LCD.

Bin um jede hilfe Dankbar!!

Mfg
Stefan

Autor: Ch D. (chrisu) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht steht ja etwas falsches in "lcd-routines.h" ?

Autor: Verzweiflung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß nicht, was falsch ist! Ich hab kaum erfahrungen.

Ich bin ja froh, das es überhaupt etwas darstellt. Ich will ja nur, das 
es mit dem Text weitergeht.

Kann mir bitte jemand einen Befehl oder Beispiel geben?

Das LCD is von pollin.

die lcd.rountine.h
// Ansteuerung eines HD44780 kompatiblen LCD im 4-Bit-Interfacemodus
// http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
//
void lcd_data(unsigned char temp1);
void lcd_string(char *data);
void lcd_command(unsigned char temp1);
void lcd_enable(void);
void lcd_init(void);
void lcd_home(void);
void lcd_clear(void);
void set_cursor(uint8_t x, uint8_t y);

// Hier die verwendete Taktfrequenz in Hz eintragen, wichtig!

#define F_CPU 8000000

// LCD Befehle

#define CLEAR_DISPLAY 0x01
#define CURSOR_HOME   0x02

// Pinbelegung für das LCD, an verwendete Pins anpassen

#define LCD_PORT      PORTD
#define LCD_DDR       DDRD
#define LCD_RS        PD4
#define LCD_EN        PD5
// DB4 bis DB7 des LCD sind mit PD0 bis PD3 des AVR verbunden

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

Bewertung
0 lesenswert
nicht lesenswert
Verzweiflung schrieb:
> Ich weiß nicht, was falsch ist! Ich hab kaum erfahrungen.

Worin soll denn deiner Meinung nach die Warterei bestehen?
   while(10);

Da steht: solange 10 ungleich 0 ist, mach nichts. 10 ist immer ungleich 
0 und wenn du bis ans Ende des Universums wartest.

Wenn du sowas wie ein Menüsystem bauen willst, dann ist die einfachste 
Variante die, für jede 'Seite' eine eigene Funktion zu machen. Das ist 
zwar bei deinem Mikrobeispiel nicht wirklich notwendig, sobald es aber 
komplizierter wird, sieht die Sache anders aus.
..
#include <util/delay.h>
..


void delay_sec( uint8_t sec )
{
  uint8_t i;

  for( i = 0; i < sec; ++i )
    _delay_ms( 1000 );
}

void Seite_1()
{
  lcd_clear();

  lcd_string( "Mutti fraegt Kind" );

  delay_sec( 10 );
}

void Seite_2()
{
  lcd_clear();

  lcd_string( "antwortet" );

  delay_sec( 10 );
}

int main()
{
  lcd_init();

  while( 1 )
  {
    Seite_1();
    Seite_2();
  }
}


Aber sei gewarnt: Solche Warteschleifen sind nur am Anfang dein Mittel 
zur Lösung. In richtigen Programmen kommt man so nicht weiter. 
Hauptsächlich deshalb, weil innerhalb einer Warteschleife (delay_sec) 
nichts weiter passieren kann ausser ISR abzuarbeiten. Genau das ist aber 
kontraproduktiv. Man möchte ja meistens haben, dass ein µC sofort auf 
ein Ereignis reagiert und nicht erst stumpfsinnig irgendwelche Zeit 
runterzählt.

Edit: Damit die _delay_ms Funktion richtig funktioniert, muss der 
Optimizer des Compilers eingeschaltet sein.
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es heißt "fragt" und nicht "fraegt". Grausam.

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.