Moin!
ich bin grade dabei, ein 32K SRAM an meinen AtMega32 zu basteln, die Schaltung ist folgendermaßen aufgebaut :
PORTA geht jeweils an die Eingänge von 2 74hc573n Latches und I0-I7 vom SRAM 62256, die Ausgänge der Latches sind an A0-A14 und CS vom SRAM, OE der Latches ist an GND, die LE Eingänge sind an PB0 (LE_low) und PB1 (LE_high), PB2 geht an WE und PB3 an OE.
Nun versuche ich, mit folgendem Code den RAM anzusprechen, aber ich kriege immer nur eine 0 gelesen, selbst wenn ich vorher versuche, etwas anderes zu schreiben.
Als Test benutze ich dieses hier:Code:void writemem(unsigned int addr, unsigned char value) { PORTB |= (WE); PORTB |= (RE); DDRA=0xff; PORTA = (addr / 256); PORTB |= (LE_low); _delay_ms(10); PORTB &= ~(LE_low); PORTA = (addr & 255); PORTB |= (LE_high); _delay_ms(10); PORTB &= ~(LE_high); PORTA = value; PORTB &= ~(WE); _delay_ms(10); PORTB |= (WE); DDRA=0; } unsigned char readmem(unsigned int addr) { unsigned int value; PORTB |= (WE); PORTB |= (RE); DDRA=0xff; PORTA = (addr / 256); PORTB |= (LE_low); _delay_ms(10); PORTB &= ~(LE_low); PORTA = (addr & 255); PORTB |= (LE_high); _delay_ms(10); PORTB &= ~(LE_high); DDRA=0; PORTA=0; PORTB &= ~(RE); _delay_ms(10); value = PORTA; PORTB |= (RE); return value; }
Was mache ich falsch?Code:void memtest(void) { unsigned int addr; unsigned char value; for (addr=0;addr<32767;addr++) { writemem(addr,42); value=readmem(addr); uart_putc(value); } }
Vielen Dank schonmal!!







Zitieren

Lesezeichen