Hallo! Ich habe ein kleines Verständnis Problem bei der Übergabe einer Variabeln an eine Array: Global char I2C_Senden[8]; Hauptschleife int main(void) { uint8_t Signal1 = 0; while(1) { ... ... if (Zeit >= 125) { I2C_Senden[0] = Signal1; // Übergabe Signal1 = 0x00; // zurück setzen } } } Das Signal soll in die Array[0] geschrieben werden, was auch funktioniert. So wie ich aber die Variable „Signal1“ wieder zurück setze, verschwindet auch der Wert aus der Array[0]. Was mache ich hier falsch, bzw. warum wird hier die Array[0] auch mit gelöscht? LG Jens
wann genau setzt er denn I2C_Senden[0] zurück? so wie der Code jetzt aussieht denke ich mal, dass er es beim nächsten durchlaufen der While-Schleife das ganze zurücksetzt. Jedoch ist es auch nur ein kleiner Teil deines Codes. Bleibt der Wert erhalten, wenn du nen Breakpoint hinter dem Überschreiben der Variable Signal1 setzt?
> wann genau setzt er denn I2C_Senden[0] zurück? In dem Augenblick wo ich die Variable lösche. Lösche ich die Variable nicht, dann stehen die Werte auch in der Array. Da die Variable aber ab einen bestimmten Punkt überläuft, steht auch nur Murks in der Array. Das Problem tritt übrigens auch auf wenn ich an stelle der Array eine „uint8_t“ verwende. Ich habe das gesamte Projekt einmal hoch geladen. (erstellt mit AVRstudio, WinAVR-20100110 und es soll auf einen ATmega8 laufen) http://www.pcfilter.de/Hallo1001/Temp/Daten.rar LG Jens
Jens schrieb: >> wann genau setzt er denn I2C_Senden[0] zurück? > > In dem Augenblick wo ich die Variable lösche. Mit Sicherheit nicht. Dein 'Problem' ist ein ganz anderes
1 | ISR(TIMER0_OVF_vect) { // Beginn Timer1 Überlauf |
2 | TCNT0 = vorladen; // Timer0 neu vorladen |
3 | Zeit++; // Zeit Zähler +1 (für RS232 Ausgabe) |
4 | }
|
1 | while( 1 ) { |
2 | |
3 | ....
|
4 | |
5 | // --- Tachoimpulse alle 2 Sekunden übergeben ------------------------------------
|
6 | if (Zeit >= 125) { // wenn 2 Sekunden vergangen sind, dann... |
7 | |
8 | I2C_Senden[0] = Tacho1; // Tacho1 an Array übergeben |
9 | I2C_Senden[1] = 2; |
10 | I2C_Senden[2] = 3; |
11 | I2C_Senden[3] = 4; |
12 | I2C_Senden[4] = 5; |
13 | I2C_Senden[5] = 6; |
14 | I2C_Senden[6] = 7; |
15 | I2C_Senden[7] = 8; |
16 | |
17 | Tacho1 = 0x00; // Tacho1 zurück setzen |
18 | } // Ende wenn 2 Sekunden vergangen sind |
19 | |
20 | .....
|
21 | }
|
Zeit wird nie auf 0 zurückgesetzt, sondern immer nur hochgezählt. Das ist ja auch in Ordnung. Irgendwann wird der Wert in Zeit zu 128 und die Zuweisungen zum Array finden statt. Danach setzt du Tacho1 auf 0. Aber: Zeit bleibt nach wie vor auf 128. Das hißt, die Bedingung Zeit >= 128 ist im nächsten Durchlauf durch die Hauptschleife schon wieder true und wieder laufen die Zuweisungen ab. Nur ist diesmal Tacho1 schon auf 0 und dann wird natürlich auch I2C_Senden[0] auf 0 gesetzt. Du musst dir da einen anderen Mechanismus einfallen lassen.
@ Karl heinz Danke für die schnelle Antwort. Manchmal sieht man den Baum vor lauter Bäumen nicht. Ich habe die „Zeit“ Variable jetzt zurück gesetzt und nun läuft alles wunderbar... Danke... if (Zeit >= 125) { // wenn 2 Sekunden vergangen sind, dann... Zeit = 0x00; // Reset – Zähler zurück setzen I2C_Senden[0] = Tacho1; // Tacho1 an Array übergeben ... Tacho1 = 0x00; // Tacho1 zurück setzen ... } // Ende wenn 2 Sekunden vergangen sind LG Jens
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.