Argl...
einen Masseschluß und einem Tausch von Low- und Highbyte der Adresse später....
Zum testen hab ich jetzt mal ein paar Pullups beim lesen angeschaltet, merkwürdigerweise krieg ich dann auch genau diese Bits als high gelesen, also scheint das RAM irgendwie nicht das zu tun, was es soll, die Adressen kommen aber sauber an, und die Steuersignale auch.....Code:void initinterface(void) { DDRA=0; PORTA=0; DDRB |= 15; PORTB |= (1<<WE); PORTB |= (1<<OE); PORTB &= ~(1<<LE_low); PORTB &= ~(1<<LE_high); } void writemem(unsigned int addr, unsigned char value) { PORTB |= (1<<WE); //WE auf high PORTB |= (1<<OE); //OE auf high DDRA=0xff; //PORTA als Ausgang PORTA = (addr / 256); //Highbyte der Adresse ausgeben _delay_ms(ws); PORTB |= (1<<LE_high); //Latch 1 input enable _delay_ms(ws); PORTB &= ~(1<<LE_high); //Latch 1 input disable _delay_ms(ws); PORTA = (addr & 255); //Lowbyte der Adresse ausgeben _delay_ms(ws); PORTB |= (1<<LE_low); //Latch 2 input enable _delay_ms(ws); PORTB &= ~(1<<LE_low); //Latch 2 input disable _delay_ms(ws); PORTA = value; //Daten ausgeben PORTB &= ~(1<<WE); //WE auf low _delay_ms(ws); PORTB |= (1<<WE); //WE auf high _delay_ms(ws); DDRA=0; //PORTA auf Eingang PORTA=0; //keine Pullups } unsigned char readmem(unsigned int addr) { unsigned char value; PORTB |= (1<<WE); //WE auf high PORTB |= (1<<OE); //OE auf high DDRA=0xff; //PORTA als Ausgang PORTA = (addr / 256); //Highbyte der Adresse ausgeben _delay_ms(ws); PORTB |= (1<<LE_high); //Latch 1 input enable _delay_ms(ws); PORTB &= ~(1<<LE_high); //Latch 1 input disable _delay_ms(ws); PORTA = (addr & 255); //Lowbyte der Adresse ausgeben _delay_ms(ws); PORTB |= (1<<LE_low); //Latch 2 input enable _delay_ms(ws); PORTB &= ~(1<<LE_low); //Latch 2 input disable DDRA=0; //PORTA als Eingang PORTA=0; //keine Pullups _delay_ms(ws); PORTB &= ~(1<<OE); //OE auf low _delay_ms(ws); value = PORTA; //Daten lesen nach 'value' _delay_ms(ws); PORTB |= (1<<OE); //OE auf high _delay_ms(ws); return value; }
HILFEE!!







Zitieren
Lesezeichen