Hier mal, so wie ich es mache (schematsch)
Sollte eigentlich zu verstehen sein, was da gemacht wird.Code:#include <util/delay.h> #include <avr/io.h> void vfd_send0 (uint8_t); void vfd_send1 (uint8_t); void vfd_send_nibble (uint8_t); void vfd_send0 (uint8_t b) { CLR (PORT_RS); vfd_send_nibble (b>>4); vfd_send_nibble (b); } void vfd_send1 (uint8_t b) { SET (PORT_RS); vfd_send_nibble (b>>4); vfd_send_nibble (b); } void vfd_send_nibble (uint8_t b) { CLR (PORT_E); CLR (PORT_RW); VFD_CLR_DB; // PORT_DB[0..3] = 0 if (b & (1<<0)) SET (PORT_DB0); if (b & (1<<1)) SET (PORT_DB1); if (b & (1<<2)) SET (PORT_DB2); if (b & (1<<3)) SET (PORT_DB3); SET (PORT_E); LOOP (100); CLR (PORT_E); }
LOOP wird abgebildet auf _delay_loop_1 aus util/delay.h
Ausserdem warte ich nach dem Reset ne Zeit lang, bevor ich ein Display anfasse (mehrere zig ms).
Lesezeichen