Forum: Compiler & IDEs I2C und MSPGCC - Erfahrungsaustausch gesucht


von Wolfgang (Gast)


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

von Christian R. (supachris)


Lesenswert?

Na was genau funktioniert denn nicht? Haste du auch die signal.h usw mit 
eingebunden?

von Wolfgang (Gast)


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

von Christian R. (supachris)


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.

von Wolfgang (Gast)


Lesenswert?

Gibt es jemand, bei dem I2C unter Verwendung des vorhandenen Moduls mit 
mspgcc funktioniert? Bitte melden.
Wolfgang

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Soviel Zeit muss sein.
Im Anhang ein Programmschnipsel, welcher mit dem IAR Compiler 
funktioniert. Ich hoffe, dass ich keine Teile vergessen habe.
Schon mal vielen Dank für Deine Bemühungen.
Wolfgang

von Christian R. (supachris)


Lesenswert?

Das kompiliert doch der GCC garantiert nich ohne zumindest Warnungen?!? 
Die Interrupts werden da anders deklariert. Ebenso fehlt die für 
Interrupts zuständige signal.h includiert.

von Wolfgang (Gast)


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

von Wolfgang (Gast)


Lesenswert?

Hallo  Steven,
beschäftigst Du dich noch mit dem Problem oder liegt es auf Eis?
MfG
Wolfgang
hat vielleicht jemand einen Tipp?

von Wolfgang (Gast)


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

von Wolfgang (Gast)


Lesenswert?

das war ein blinder Alarm. Tut mir leid. Mit einem TMP275, welcher über 
I2C direkt an den MSP430 angebunden ist, läuft I2C mit mspgcc . Die 
Ursache für die Fehlfunktion mit DS2482 muss ich noch suchen
Wolfgang

von Wolfgang (Gast)


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

von Andreas K. (a-k)


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.

von Andreas K. (a-k)


Lesenswert?

Klar geht es. Ich bezweifle nur dass das Absicht war. Und bei grösserem 
"int" dauert's etwas lang.

von Christian R. (supachris)


Lesenswert?

Ohne volatile is die Schleife eh weg.

von Wolfgang (Gast)


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

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
Noch kein Account? Hier anmelden.