I2C und MSPGCC - Erfahrungsaustausch gesucht

Gast #609228
Lesenswert?

Wenn ich mspgcc Vers 060502 zur Programmierung eines MSP430F1611 
einsetze,  funktioniert der  I2C Bus nicht.
Bei der Verwendung von IAR Kickstart gibt es keine Probleme. Hat jemand 
ähnliche Erfahrungen gemacht oder müssen hier noch irgendwelche Dateien 
eingebunden werden?
Wolfgang
Gast #609563
Lesenswert?

Am MSP430F1611 ist über I2C ein DS2482-100 angeschlossen, der den 
Temperaturfühler DS18B20 über 1wire abfragt. Die Temperatur wird auf 
einer Flüssigkristallanzeige angezeigt und soll auf einer Smart Media 
Karte abgespeichert werden. Mit IAR funktionieren das Auslesen der 
Temperatur und die Anzeige auf der Flüssigkristallanzeige. Für das 
Abspeichern auf  SM karte will ich auf mspgcc umstellen, da die 
Programmgröße bei IAR auf 4kB begrenzt ist.
Bei der Verwendung von mspgcc wird immer der gleiche (und falsche) 
Messwert ermittelt, obwohl sich die Temperatur ändert.
Welche Dateien müssen für I2C eingebunden werden?
Für interrupt TimerA0 habe ich bereits signal.h verwendet.
Wolfgang
#609603
Lesenswert?

Also mit I2C hab ich speziell noch nix gemacht am MSP430, aber mitnahezu 
jedem anderen Modul. Und einen Compiler-Fehler hate ich noch nie, 
deshalb vermute ich, dass was am Code nicht stimmt. Eigentlich sind ja 
nur die ISR-Aufrufe bissl anders, die Register sind ja alle in den 
Header-Files ordentlich deklariert und per define auch kompatibel zu den 
IAR Registernamen.
Gast #610928
Lesenswert?

Offensichtlich ein Missverständnis.
Für mspgcc wurden von mir, wie in Zeile  1..4 geschrieben, nur die Teile 
von Zeile 6..46 verwendet.
Alles was nach Zeile 46 kommt, ist nur das komplette Beispiel von TI zur 
Anbindung eines TMP175 an einen MSP430.
Wolfgang
Gast #621947
Lesenswert?

>Bei mir ist dann eben der Unterschied, dass ich ein EEPROM abfrage,
>während du nur Daten empfängst.
Nein, durch die Zwischenschaltung des DS2482 besteht ein  Datenverkehr 
in beiden Richtungen.
>Wenn du ein Oszi oder einen Logicanalyzer hast oder an sowas rankommst,
>kannst du direkt die beiden Programme vergleichen. Das werde ich nun
>auch testen.
Steck nicht zuviel Arbeit rein. Mit einem Oszi habe ich die Schaltung 
und das Programm, welches mit IAR compiliert wurde, zur Inbetriebnahme 
getestet. Hier lief ja I2C schon.
Es geht also „nur“ darum, ob oder unter welchen Bedingungen der I2C Bus 
mit mspgcc funktioniert.
>Und teste es mal bitte mit Optimierung und ohne.
Werd ich mal probieren. Vielleicht optimiert der mspgcc irgendetwas weg.
Was muss ich dazu eingeben?
Wolfgang
Gast #623189
Lesenswert?

Ursache gefunden. Es lag offensichtlich an einer Warteschleife, z.B.
void pause (void)
{
unsigned int i;
for (i=60000; i>0; i++)
}
die zwischen IAR und mspggc bei gleicher Schleifenlänge in 
unterschiedlicher Zeit  ausfällt.
Die Warteschleife ist für die Funktion des Temperaturfühlers notwendig.
Jetzt läuft mein Programm auch mit mspgcc.
Wolfgang
#624829
Lesenswert?

> unsigned int i;
> for (i=60000; i>0; i++)

Solange raufzählen bis i==0??? Macht sich ganz besonders gut auf einer 
32bit Kiste ;-)

Könnte sein, dass du den GCC damit so verwirrt hast, dass er die 
Schleife drin liess. Normalerweise optimiert er die komplett weg, weil 
sinnlos.
Gast #625794
Lesenswert?

>Solange raufzählen bis i==0??? Macht sich ganz besonders gut auf einer
>32bit Kiste ;-)
>>Ich bezweifle nur dass das Absicht war.
ist ein Dreckfehler, sollte i-- sein

>Jetzt wäre es schön zu wissen, wer der Übeltäter von beiden ist.
m. E. nicht nötig, jeder Compiler macht offensichtlich sein eigenes Ding

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren