Hi zusammen,
da ich nix traue, was ich nicht selber geschrieben habe, hab ich versucht, mithilfe der LCD-Schilderung von www.mc-project.de selber das LCD anzuwerfen:
Code:
#include <inttypes.h>
#include <avr/io.h>
#define Pin1 0
#define Pin2 1
#define Pin3 2
#define Pin4 3
#define Pin5 4
#define Pin6 5
#define Pin7 6
#define Pin8 7
#define DataPin1 Pin1
#define DataPin2 Pin2
#define DataPin3 Pin3
#define DataPin4 Pin4
#define PinRS Pin5
#define PinE Pin6
#define PinRW Pin7
void delay(int ms)
{
int i,j;
for (i = 0; i < ms; i++)
for(j = 0; j < 8000; j++)
asm volatile ("nop");
}
void toggle_e(void)
{
PORTC |= (1 << PinE);
asm volatile ("rjmp 1f\n 1:");
PORTC &= ~(1 << PinE);
}
void waitWhileBusy(void)
{
DDRC |= ~(1 << DataPin4);
PORTC |= ( (1 << PinRW) | (1 << PinE) );
while ( ( PINC & (1 << DataPin4) ) )
asm volatile ("nop");
DDRC &= (1 << DataPin4);
PORTC &= ~( (1 << PinRW) | (1 << PinE) );
}
int main (void)
{
DDRB = 0xFF;
PORTB = ~( (1 << Pin1) );
DDRC = 0xFF;
PORTC = 0x00;
delay(17);
PORTC = (1 << DataPin2) | (1 << DataPin1);
toggle_e();
delay(5);
toggle_e();
delay(1);
toggle_e();
delay(2);
PORTC = (1 << DataPin1);
toggle_e();
PORTC = (1 << DataPin2);
toggle_e();
PORTC = (1 << DataPin4);
toggle_e();
delay(5);
PORTB = ~( (1 << Pin1) | (1 << Pin2) );
PORTC= 0x00;
PORTC = 0x00;
toggle_e();
PORTC = (1 << DataPin4);
toggle_e();
delay(5);
PORTC= 0x00;
PORTC = 0x00;
toggle_e();
PORTC = ( (1 << DataPin4) | (1 << DataPin3) );
toggle_e();
delay(5);
PORTC= (1 << PinRS);
PORTC |= ( (1 << DataPin4) | (1 << DataPin3) );
toggle_e();
PORTC |= ( (1 << DataPin4) | (1 << DataPin3) );
toggle_e();
PORTB = ~(1 << Pin2);
while (1) {}
}
Klappt auch ohne Probleme, nur beim letzen Übermitteln setze ich RS auf hi, damit der das als Schriftzeichen interpretieren soll.
Aber das Display bleibt leer 
Die LEDs arbeiten aber sauber...
Was mich verwundert ist, dass das Programm hängenbleibt, sobald ich die Prozedur waitWhileBusy aufrufe, daher hab ich jetzt alles mit delays gelöst...
Vllt stimmt was mit dem RW Kabel nicht oder so - das würde zumindest erklären, warum die Libary immer hängen blieb....
Aber richtig zufriedenstelllend is dieses Zwischenergebnis nun auch nicht...
Any Vorschläge?
Bye
Alex
Lesezeichen