der at90s8515 müsste doch zum ansteuern gehen. er hat die pins a0-a15 oder???.
mfg pebisoft
hier der Code aus TWI.h:
TWI.cCode:#ifndef TWI_H #define TWI_H #include <avr/io.h> #include <stdint.h> #define SEND 0 #define READ 1 void TWI_init(uint8_t); uint8_t TWI_start(uint8_t); void TWI_sendbyte(uint8_t); uint8_t TWI_readbyte(void); void TWI_stop(void); #endif
sram.hCode:#include "TWI.h" /* TWI initialisieren */ void TWI_init(uint8_t ownaddr) { TWAR = ownaddr; TWSR &= 0xFC; TWBR = 0x0; } /* Start und Slaveaddresse senden */ uint8_t TWI_start(uint8_t ndevaddr) { TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); while(!(TWCR & (1<<TWINT))); TWDR = ndevaddr; TWCR = (1<<TWINT) | (1<<TWEN); while(!(TWCR & (1<<TWINT))); } /* Byte senden */ void TWI_sendbyte(uint8_t nbyte) { TWDR = nbyte; TWCR = (1<<TWINT) | (1<<TWEN); while(!(TWCR & (1<<TWINT))); } /* Byte lesen */ uint8_t TWI_readbyte(void) { TWCR |= (1<<TWINT) | (1<<TWEA); while(!(TWCR & (1<<TWINT))); return TWDR; } /* Stop senden */ void TWI_stop(void) { TWCR = (1<<TWINT) | (1<<TWSTO) | (1<<TWEN); }
sram.cCode:#ifndef SRAM_H #define SRAM_H #include <inttypes.h> #include <avr/io.h> #define WE_PIN 0 // WriteEnable #define WE_PORT PORTB #define CS_PIN 2 // ChipSelect #define CS_PORT PORTB #define LE_PIN 3 // LatchEnable #define LE_PORT PORTB #define ADDR PORTA // Addressport void sram_write_byte(uint16_t, uint8_t); uint8_t sram_read_byte(uint16_t); void Latch(uint8_t); #endif
der Code zum Ansteuern des sram sieht ein wenig komisch aus, weil ich keinen freien Port mehr für die Daten übrig hatte, so habe ich 6Pins vom PortC und 2 Pins vom PortD verwendet, was das ganze komplizierter machtCode:#include "sram.h" /* Byte in sram speichern */ void sram_write_byte(uint16_t address, uint8_t data) { /* Addresse anlegen */ Latch(address & 0x00FF); ADDR = ((address & 0xFF00) >> 8); /* Byte anlegen */ DDRC |= 0xFC; DDRD |= 0x30; PORTC = (data & 0xFC); PORTD &= ~0x30; PORTD |= ((data<<4) & 0x30); /* Byte speichern */ WE_PORT &= ~(1<<WE_PIN); delay(2); WE_PORT |= (1<<WE_PIN); } /* Byte aus sram lesen */ uint8_t sram_read_byte(uint16_t address) { /* Addresse anlegen */ Latch(address & 0x00FF); ADDR = ((address & 0xFF00) >> 8); /* Byte lesen und zurückgeben */ DDRC = 0x0; DDRD &= ~0x30; delay(2); return ((PINC & 0xFC) | ((PIND & 0x30)>>4)); } void Latch(uint8_t wert) { ADDR = wert; LE_PORT |= (1<<LE_PIN); delay(2); LE_PORT &= ~(1<<LE_PIN); }
ja, das wirst du auch finden, aber es erklärt sich doch von fast selbst: es wird eine Funktion namens sram_write_byte aufgerufen, die ein Byte in den sram schreibt, als Argumente gibts einmal eins vom Typ uint16_t, was die Addresse im Ram sein wird und einen 8 Bit-Wert, in dem die Daten stehenda ist dies bestimmt auch drin: sram_write_byte(counter, TWI_readbyte());
der at90s8515 müsste doch zum ansteuern gehen. er hat die pins a0-a15 oder???.
mfg pebisoft
dann müsste er auch ein externes Speicherinterface haben, womit du externen sram wie internes verwenden kannst
allerdings, wenn es auf die Geschwindigkeit nicht ganz so sehr ankommt, kann man den sram auch an jeden AVR anschließen(so hab ich das auch gemacht)
welche pins vom sram schliest du wo am at90s8515 an und welche brauchen nicht angeschlossen werden.
mfg oebisoft
Hallo,
hier mal der Schaltplan von Daniel Herrington (ist leider nicht mehr im Netz), der funzt bei mir mit einen anderen AD-Wandler einwandfrei.
@pebisoft das Programm dafür haste ja schon![]()
Gruß
-=jens=-
Öhm... das ganze wurde auch schon erfolgreich in Bascom gelöst von Mr. Nobody oder so...
Gruß, Trabukh
"Der Mensch wächst am Widerstand" (Werner Kieser)
Hallo PebisoftZitat von pebisoft
Also ich hatte noch nie Probleme mit einer Pegelanpassung bei dem Max232 aufgrund von Fertigungstoleranzen bei Kondensatoren.
Und das mit dem Messen stimmt eigentlich auch nicht.
Du kannst mit einem normalen Wiederstandsmeßgerät nachmessen ob der Kondensator noch brauchbar ist (ist der C hochomig genug ? ).
Außerdem besitzen die meißten Multimeter mittlerweile auch ein Kapazitätsmeßgerät. Da wird dann zb mit einer bekannten Induktivität ein Schwingkreis gebildet und die Frequenz nachgemessen, ...
Mittlerweile bin ich auf den Max202 umgestiegen, der braucht nur mehr 100nF C. Und auch mit dem habe ich noch nie Probleme gehabt.
Und das noch dazu wo ich einen Nachbau verwende (HIN202EBN) der viel billiger ist.
LG
Rubi
Ich bin im Moment dabei eine Materialliste zu erstellen wobei ich noch etwas Hilfe brauche da ich zur zeit noch nicht all zu fiel über den ATMega weiss.
Materialliste:
ATMega16-16
ADC: PCF8591
SRAM: 62256-80
?-RS232: Max232
?-Quarze und dazugehörige Kondensatoren
?-Sonstige Teile die zum betrieb notwendig sind.
Und jede menge Fassungen, Spannungsregler, Kabel,...
Zudem Suche ich noch einen geeigneten Shop der in die Schweiz liefert und nicht zu teuer ist. Musste feststellen das Distrelec fast vier mal Teurer ist als Reichelt. Kennt jemand einen Shop der meinen Anforderungen entspricht? Reichelt liefert erst ab 150€ in die Schweiz.
Ist der Grundaufbau auf dem Bild korrekt? Frage ich nur weil ich noch nie mit einem ATMega gearbeitet habe. Die restlichen Teile anzuschliessen ist dann kein Problem mehr.
hallo rubi, herzlichen glückwunsch...........
es können aber nicht alle so schlau nachmessen wie du schilderst..........
oder kannst du einen laien klar machen wie 5% toleranzunterschied von 0,01 us gemessen werden kann und wie gross dazu der schwingkreis sein muss.
mfg pebisoft
Hallo PebisoftZitat von pebisoft
Ich möchte hier mal behaupten, das dem MAX232 egal ist, ob man jetzt einen 1uF, 4,7uf oder 10uF C anschließt, er wird ohne Problem funktionieren.
Aber ich, möchte eigentlich nicht mit Dir streiten.
Habe das nur erwähnt, damit man nicht einen Fehler an der falschen Stelle vermutet und ich schon dutzende Max232 verwendet habe und nicht einer ein Problem mit Kapazitäten hatte.
Habe einmal sogar uralte 1uF C genommen, die sicher weit von ihrem soll Wert entfernt waren und dennoch hat alles gefunzt.
Glaubs mir bitte oder probier es einmal aus, dieser IC ist wirklich absolut unkritisch was die Lade C betrifft.
LG
Rubi
Lesezeichen