Autor |
Probleme TWI (I2C) Atmega 16 Suche nach: i2c (581) atmega (404) |
|
|
|
|
BID = 699135
terrorfreak Neu hier
Beiträge: 36 Wohnort: Weikersheim
|
|
Jo, sorry, hab ich auch grad gesehen.^^ Muss natürlich einzeln jeweils an sdl und scl.^^ Mit dem Compileraufruf kann ich leider nix anfangen. Hab grad auch schon ein wenig gegoogelt aber leider nix passendes gefunden.
Gruß Bastian |
|
BID = 699295
terrorfreak Neu hier
Beiträge: 36 Wohnort: Weikersheim
|
|
Ahh, genau, eine Frage hätt ich noch. Wenn ich bei meinem Atmega16 am Port C an den restlichen anschlüssen noch LED's hinmachen will. Auf was muss ich da aufpassen? Weil an diesem Port ja auch SCL und SDA vom TWI sind mein ich. Oder kann ich da ohne Probleme zum Bleistift PORTC = 0xAA; schreiben oder so, ohne den Bus zu stören?
Gruß Bastian |
|
BID = 699309
Jornbyte Moderator
Beiträge: 7178
|
Zitat :
| Oder kann ich da ohne Probleme zum Bleistift PORTC = 0xAA; schreiben oder so, ohne den Bus zu stören? |
Ja, das kannst du machen.
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 699310
terrorfreak Neu hier
Beiträge: 36 Wohnort: Weikersheim
|
Cool, danke!!!!
Gruß Bastian
|
BID = 699666
terrorfreak Neu hier
Beiträge: 36 Wohnort: Weikersheim
|
Auwee, ich glaub ich hab den Fehler bei meinem Temperatur auslesen.
@DonComi
Du hast doch mal geschrieben, dass ich die Statusregister auswerten muss, wenn ich von einem Slave lesen will. In dem Fall ist der DS1621 ja auch mein Slave. Muss ich nicht beim repeated start wenn ich von SLA+W auf SLA+R schalte das Statusregister auswerten, wenn der DS1621 mir die Werte schickt? Wenn ja, wie müsste dann meine Funktion zum Temperatur auslesen aussehen? Hab leider keine Ahnung....
Gruß Bastian
P.S. Hier nochmal die Funktion
Code : |
uint8_t temperatur_auslesen(void)
{
uint8_t MSB;
uint8_t LSB;
// SEND A "STANDALONE" COMMAND (START/STOP CONVERT)
ds1621_start(); // Start I2C
ds1621_transmit(0x90); // 1001 000 0 Adressierung (write)
ds1621_transmit(0xEE); // Messung starten
ds1621_stop();
// READ FROM A TWO-BYTE REGISTER (TH, (TL), TEMPERATURE)
ds1621_start(); // Start I2C
ds1621_transmit(0x90); // 1001 000 0 Adressierung (write)
ds1621_transmit(0xAA); // Befehl Temperatur lesen
ds1621_start(); // Repeated start
ds1621_transmit(0x91); // 1001 000 1 Adressierung (read)
MSB = ds1621_receive(); // Wert empfangen
LSB = ds1621_receive(); // Kommastelle empfangen
ds1621_stop();
return MSB;
}
|
|
[ Diese Nachricht wurde geändert von: terrorfreak am 1 Jul 2010 19:40 ]
|
BID = 699748
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Nein, dass habe ich so nicht gesagt.
Ich habe gesagt, dass, sobald mehrere Protokolle vorhanden sind und allgemein Wert auf Programmstabilität gelegt wird, das Statusregister nach jeder TWI-Aktion ausgewertet werden sollte.
Ich habe dir oben eine Funktion geschrieben, dort ist ersichtlich, wie man das Statusregister auswerten könnte. Passe es an, ließ dir die Werte aus dem Datenblatt heraus.
Hast du denn jetzt die Kondensatoren über der Versorgungsspannung eingebaut?
Der I²C-Bus ist eigentlich einer sehr sichere Art, Daten auszutauschen, bei dir habe ich das Gefühl, dass da noch ein paar Unbekannte in der Gleichung zum Erfolg sind.
_________________
|
BID = 699755
Jornbyte Moderator
Beiträge: 7178
|
Nun melde ich mich noch mal. Es wurde bisher alles geschrieben, lese es nochmal von Anfang an und beherzige alle Sätze.
@ Don
weitere Fragen sollten erst in 3 bis 4 Wochen beantwortet werden
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 699760
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
@Jorn
Haha, stimmt
Langsam wird es an der Uni ruhiger, nächsten Montag nocheinmal Hardcore-Informatik und das ist Schluss .
Dann geht es auf der alten Baustelle weiter.
@terrorfreak:
Ja, ich denke, Jorn hat Recht.
Ich habe soviele Infos reingeschrieben und mich so oft wiederholt, dass das Problem denke ich mit Lesen aller Beiträge gelöst werden kann.
Aber auch nur, wenn du mir glaubst und diese Kondensatoren reinbaust.
Ich biete dir nochmals an, dass du mir einen schönen Schaltplan machst, den ich gerne kontrollieren werde. Anforderungen dazu:
* übersichtlich,
* korrekte Symbole
* haargenauso, wie der Aufbau (!!)
Dann kann man sehen, ob da was elektrisch nicht stimmt.
Es kann nämlich durchaus sein, dass die Versorgung zu knapp bemessen ist oder irgendwo ein ungewollter Widerstand in Serie liegt, und bei jedem höheren Strom, den der µC zieht bricht die Spannung ein -> Brownout-Detektor startet den µC neu und das Ergebnis ist, dass es vllt. erst nach fünf Minuten klappt.
Oder irgend etwas anderes...
_________________
|
BID = 699795
terrorfreak Neu hier
Beiträge: 36 Wohnort: Weikersheim
|
Ok, dann werde ich das so machen.^^ Aber trotzdem nochmal ein rießen Dankeschön an euch alle! Ihr habt mir echt viel geholfen, auch wenn ich ein schwieriger Fall bin.^^
Gruß Bastian
|