Forum: Mikrocontroller und Digitale Elektronik Problem mit AVR-CTRL V 1.0


von Chrisi01 (Gast)


Lesenswert?

hi

hab folgendes Programm:

#asm
    .equ __lcd_port=0x15
#endasm
#include <mega8535.h>
#include <lcd.h>

typedef unsigned char byte;

/* table for the user defined character

   arrow that points to the top right corner */
flash byte char0[8]={
0b0000000,
0b0001111,
0b0000011,
0b0000101,
0b0001001,
0b0010000,
0b0100000,
0b1000000};
void define_char(byte flash *pc,byte char_code)
{
byte i,a;
a=(char_code<<3) | 0x40;
for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);
}
void main(void)
{
DDRA = 0x00;
lcd_init(16);
define_char(char0,0);
lcd_gotoxy(0,0);
lcd_putsf("Enter Message");
lcd_gotoxy(1,1);
if (PINA.7)
{
lcd_putsf("7");
}
if (PINA.6)
{
lcd_putsf("6");
}
if (PINA.5)
{
lcd_putsf("5");
}
if (PINA.4)
{
lcd_putsf("4");
}
if (PINA.3)
{
lcd_putsf("3");
}
if (PINA.2)
{
lcd_putsf("2");
}
if (PINA.1)
{
lcd_putsf("1");
}
if (PINA.0)
{
lcd_putsf("0");
}
while (1);
}

leider klappt das nicht er sollte doch in der 2. Zeile auf dem 2 Platz 
den Buchstaben anzeigen von der Taste die gedrückt wird aber es tut sich 
eifnach nix es kommt nur Enter Message aber Tasten kann ich drücken wie 
ich will es tut sich nix wer weiß rat?

mfg

Chris

von Michael U. (Gast)


Lesenswert?

Hallo,

wenn ich Prozessor wäre, würde ich nach dem Reset mal schnell durch die 
main() rennen, feststellen, das keine Taste dedrückt ist und mich dann 
ewig in der while(1); langweilen...

Gruß asu Berlin
Michael

von Chrisi01 (Gast)


Lesenswert?

hi danke bin ja sau dumm ;)

habs jetzt so gemacht:

#asm
    .equ __lcd_port=0x15
#endasm
#include <mega8535.h>
#include <lcd.h>
#include <delay.h>

typedef unsigned char byte;

/* table for the user defined character

   arrow that points to the top right corner */
flash byte char0[8]={
0b0000000,
0b0001111,
0b0000011,
0b0000101,
0b0001001,
0b0010000,
0b0100000,
0b1000000};
void define_char(byte flash *pc,byte char_code)
{
byte i,a;
a=(char_code<<3) | 0x40;
for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);
}
void main(void)
{
while(1)
{
DDRA = 0x00;
lcd_init(16);
define_char(char0,0);
lcd_gotoxy(0,0);
lcd_putsf("Enter Message");
lcd_gotoxy(1,1);
if (PINA.7)
{
lcd_putsf("7");
}
if (PINA.6)
{
lcd_putsf("6");
}
if (PINA.5)
{
lcd_putsf("5");
}
if (PINA.4)
{
lcd_putsf("4");
}
if (PINA.3)
{
lcd_putsf("3");
}
if (PINA.2)
{
lcd_putsf("2");
}
if (PINA.1)
{
lcd_putsf("1");
}
if (PINA.0)
{
lcd_putsf("0");
}
delay_ms(500);
}
}

neues problem:
sobald ich eine Taste gedrückt hab fehlen einige Buchstaben oder er 
verdreht sie anscheinend willkürlich. an was kann das liegen?

mfg

chris

von Michael U. (Gast)


Lesenswert?

Hallo,

gibt es einen geheimen Grund, weshalb Du jetzt in der while-Schleife 
jedesmal die Portrichtung festlegst, das Display initalisiertst, das 
selbstdefinierte Zeichen reinschreibst und den Begrüssungstext ausgibst?
So vergeßlich sind weder AVR noch Display, daß man die da dauernt 
erinnern muß...

Zu den falschen Zeichen:
a) ich kenne AVR-CTRL nicht
b) ich kenne das Display bzw. die benutzten Bibliotheken nicht
c) ich kenne die Taktfrequenz des AVR nicht
d) ich weiß also auch nicht, ob man die Bibliothek an Display und Takt 
von Hand anpassen muß (wäre normal) oder ob das irgend so ein 
"Programmierbaukasten ist.

Vermuten würde ich ein Timingprobkem bei der Display-Ansteuerung, da 
warte vermutlich eine Funktion nicht ordentlich, bis das Display soweit 
ist.

Gruß aus Berlin
Michael

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.