Forum
atmega8 vs HD44780 (Computertechnik)
» #define DATA0 PC4
» #define DATA0_DDR DDRC
» #define DATA0_PORT PORTC
» #define DATA0_PIN PINC
»
» Grundsätzlich ist die Ausgabe die eigentliche Aufgabe und deshalb soll die
» Lesefunktion die PORTs auf Input stellen, lesen und danach wieder als
» Output konfigurieren.
»
» Meine Lesefunktion sieht so aus:
»
» unsigned char readRegister(unsigned char rs)
» {
» // set ports as inputs
» DATA0_DDR &= ~_BV(DATA0);
» DATA1_DDR &= ~_BV(DATA1);
» DATA2_DDR &= ~_BV(DATA2);
» DATA3_DDR &= ~_BV(DATA3);
» DATA4_DDR &= ~_BV(DATA4);
» DATA5_DDR &= ~_BV(DATA5);
» DATA6_DDR &= ~_BV(DATA6);
» DATA7_DDR &= ~_BV(DATA7);
»
» // enable pull up resistors
» DATA0_PORT &= ~_BV(DATA0);
» DATA1_PORT &= ~_BV(DATA1);
» DATA2_PORT &= ~_BV(DATA2);
» DATA3_PORT &= ~_BV(DATA3);
» DATA4_PORT &= ~_BV(DATA4);
» DATA5_PORT &= ~_BV(DATA5);
» DATA6_PORT &= ~_BV(DATA6);
» DATA7_PORT &= ~_BV(DATA7);
»
» // set RS
» if( rs ) SET_BIT(RS_PORT, RS);
» else CLEAR_BIT(RS_PORT, RS);
»
» // set RW to r
» SET_BIT(RW_PORT, RW);
»
» // set EN
» SET_BIT(EN_PORT, EN);
»
» // clear EN
» CLEAR_BIT(EN_PORT, EN);
»
» if( !(DATA0_PIN & _BV(DATA0)) )
» { data |= 0b00000001; }
» if( !(DATA1_PIN & _BV(DATA1)) )
» { data |= 0b00000010; }
» if( !(DATA2_PIN & _BV(DATA2)) )
» { data |= 0b00000100; }
» if( !(DATA3_PIN & _BV(DATA3)) )
» { data |= 0b00001000; }
» if( !(DATA4_PIN & _BV(DATA4)) )
» { data |= 0b00010000; }
» if( !(DATA5_PIN & _BV(DATA5)) )
» { data |= 0b00100000; }
» if( !(DATA6_PIN & _BV(DATA6)) )
» { data |= 0b01000000; }
» if( !(DATA7_PIN & _BV(DATA7)) )
» { data |= 0b10000000; }
»
» // set RW to w
» CLEAR_BIT(RW_PORT, RW);
»
» // reset ports as outputs
» DATA0_DDR |= _BV(DATA0);
» DATA1_DDR |= _BV(DATA1);
» DATA2_DDR |= _BV(DATA2);
» DATA3_DDR |= _BV(DATA3);
» DATA4_DDR |= _BV(DATA4);
» DATA5_DDR |= _BV(DATA5);
» DATA6_DDR |= _BV(DATA6);
» DATA7_DDR |= _BV(DATA7);
»
» return data;
» }
»
» Leider hat data nie einen anderen Wert als 0x00...
Hallo Thomas, ich seh auch nirgends eine Definition der Variablen data noch sehe ich, dass der Variablen irgendwo ein Wert zugewiesen wird. Mich wundert, dass der Compiler da net mault - Oder schwirrt da irgendwo ne globale Variable 'data' rum? Wär böser Stil
Ups ja, doch, data wird was zugewiesen - Moment - Muss nochmal genau gucken - Aber lass das bitte mit den globalen Variablen - Das macht man nur sehr sehr ungern ...
Hmm, was ist das Makro _BV? Hat das Seiteneffekte? ...
Nachtrag: Vergiss die Antwort - War Blödsinn. Gerald liegt richtig ...
--
„Wo kämen wir hin, wenn jeder sagte, wo kämen wir hin und keiner ginge, um zu sehen, wohin wir kämen, wenn wir gingen.“
(Kurt Marti)
Gesamter Thread:

