Hallo, ich möchte ADC Daten aufzeichnen und haben mehrere AT24C64 EEPROMS in der Bastelkiste gefunden. Kann ich diese an eine ATMega8 anschließen? Wenn ja, hat jemande eine Beispielschaltung und wie muss ich diesen EEPROM im C ansprechen? mfg
super vielen dank. Nun habe ich noch eine Frage zu der TWI Clock und Bit Rate. Wo kann ich feststellen wie ich Prescaler und Bitrate setze? lt den Infos aus dem Netz sollte die Bitrate beim Mega8 11 - 255 sein. Nach was richtet sich der Prescaler? In dem Beispiel ist Prescaler 0 und Bitrate 6
1 | void eeprom_init(void) { |
2 | /* initialize TWI clock: 100 kHz clock, TWPS = 0 => prescaler = 1 */
|
3 | #if defined(TWPS0)
|
4 | /* has prescaler (mega128 & newer) */
|
5 | TWSR = 0; |
6 | #endif
|
7 | TWBR = 6; |
8 | |
9 | }
|
Hallo Steffen, ich gehe mal davon aus das Du einen anderen Quarz einsetzen willst und den neuen Wert für TWBR suchst oder? Im Datenblatt des ATMega8 auf Seite 170 gibt es die Formel dafür. Wenn ich mich nicht verrechnet habe ist die TWI Taktfrequenz bei 2457600Hz Quarz und TWBR=6 87,771kHz. Bei 8MHz Quarz und TWBR=32 wäre der TWI-Takt genau 100kHz. Berichtigt mich wenn ich falsch liege... ... hp-freund
Hallo hp-freund, naja mir sind die Werte für TWSR und TWBR nicht klar. Woher nehme ich die Bitrate? lege ich die selber fest? Wenn ich in der Formel mit 8Mhz rechne und einer TWSR von 1 und TWBR von 32 komme ich auf 29kHz hm irgendwie stell ich mich hier doof an oder hab einen Denkfehler :-( Danke & Gruß
Wenn ich TWSR=1 nehme komme ich auch auf 29,411kHz. Im Beispiel ist TWSR=0 dann sind es 100kHz. TWSR=0 bedeutet Vorteiler=1 also ohne. Im Beispiel ist TWPS=TWSR=0. In der Formel wird (4 hoch TWPS(=0)) also 4hoch0=1 verwendet.
hey danke :-) ja das ist mein Gedankenfehler gewesen :-) Hatte mir ne Excel Tabelle gemacht und da einen Fehler in der Potenzrechnung :-) Nun habe ich das verstanden. :-) Nun hab ich nur noch eine Frage zu dem EEPROM.
1 | eeprom_write_byte(10, buffer); |
Das erste ist die Adresse. Das zweiter der Wert der gespeichert wird oder? Wie kann ich es machen das ich die die nächste Freie Adresse finde? Geht das nur über eine Schleife oder kann ich das aus dem EEPROM direkt abfragen?
http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html Was ist die nächste freie Adresse? 0xFF? Und wenn der Messwert 0xFF ist? Ich würde einen Index im RAM halten, der beim herunterfahren an einer festen Position mit in den EEPROM geschrieben und beim Start wieder eingelesen wird. ... hp-freund
ja ok, das leuchtet mit ein :-) vielen Dank und schönen Abend.
hello, ich muss diesen Thread noch mal auf machen :-) lt Datenblatt kann man doch die aktuelle Adresse auslesen. Das hab ich auch so versucht, bekomme aber nichts zurück. Wo habe ich den fehler gemacht? Hier der Code:
1 | int eeprom_Current_Address_Read(char *buf) |
2 | {
|
3 | |
4 | begin:
|
5 | |
6 | // send start cond.
|
7 | TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN); |
8 | while (!(TWCR & (1 << TWINT))); |
9 | if (TW_STATUS == TW_MT_ARB_LOST) goto begin; |
10 | if ( (TW_STATUS != TW_REP_START) && (TW_STATUS != TW_START)) { |
11 | return -1; |
12 | }
|
13 | |
14 | // send 0xa1
|
15 | // 0xa0 = 1010 000 1
|
16 | // 4 bits: <a..device-indentifier>
|
17 | // 3 bits: <device-address set with chip pins>
|
18 | // last bit: <1..read>
|
19 | TWDR = 0xa1; |
20 | TWCR = (1 << TWINT) | (1 << TWEN); |
21 | while (!(TWCR & (1 << TWINT))); |
22 | if (TW_STATUS == TW_MR_SLA_NACK) goto quit; |
23 | if (TW_STATUS == TW_MR_ARB_LOST) goto begin; |
24 | if (TW_STATUS != TW_MR_SLA_ACK) goto error; |
25 | |
26 | // start read transmission
|
27 | TWCR = (1 << TWINT) | (1 << TWEN); |
28 | while (!(TWCR & (1 << TWINT))); |
29 | |
30 | switch ((twst = TW_STATUS)) { |
31 | case TW_MR_DATA_NACK: |
32 | // FALLTHROUGH
|
33 | case TW_MR_DATA_ACK: |
34 | *buf = TWDR; |
35 | break; |
36 | default:
|
37 | goto error; |
38 | }
|
39 | |
40 | quit:
|
41 | //stop condition
|
42 | TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO); |
43 | return 1; |
44 | |
45 | error:
|
46 | //stop condition
|
47 | TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO); |
48 | return -1; |
49 | }
|
hp-freund schrieb: > http://www.captain.at/electronic-atmega-eeprom.php hallo, weiß jemand, wohin der link verschwunden ist? (geht bei mir nicht)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.