Forum: Mikrocontroller und Digitale Elektronik Variable ändert sich seltsam ATmega406 AVR Studio 4.19 mit Simulator


von muhkuh1206 (Gast)


Lesenswert?

Hallo,
1
#include <avr/io.h>
2
3
int main(void) {
4
uint16_t spannung;
5
6
//Zelle 1 auswählen
7
VADMUX |= (1<<VADMUX0);
8
9
// V-ADC Enabeln
10
VADCSR |= (1<<VADEN);
11
// Spannungsmessung starten
12
VADCSR |= (1<<VADSC);
13
loop_until_bit_is_set(VADCSR, VADCCIF); // sobald Messung abgeschlossen und werte gespeichert
14
spannung = VADC; // Wert in variable Spannung schreiben
15
VADCSR &= ~(1<<VADCCIF);
16
17
18
while(1) { 
19
20
 }
21
22
}

Dieser simple Code, so jedenfalls der Plan,
soll Zelle 1 im Multiplexer auswählen, anschließend Spannungs ADC 
enablen, dann die Messung starten, wenn sie vollendet ist den Wert in 
der Variable speichern und danach die IstFertigFlag? wieder auf Null 
setzten

Mit View - Watch beobachte ich die Variable Spannung. Direkt nach Run 
geht die Variable auf 0. Nach einmal F11 (step into) dann auf 1 danach 
auf 8 dann auf 12

dann klicke ich rechts bei I/O View das Kästchen von VADDCIF an damit es 
weiter gehen kann.
dann springt es auf 14 dann auf 0 und endet schließlich wieder bei 12.

VADC wird bei I/O View die ganze zeit mit 0x0000 Value angezeigt.

von Spess53 (Gast)


Lesenswert?

Hi

Simulator Hilfe->Known Issues:

Notes for ATmega406

The special features such as the Coulomb counter, V-ADC, Voltage 
Reference and Temperature Sensor, Battery Protection, FET Control and 
Cell Balancing are not simulated.

MfG Spess

von muhkuh1206 (Gast)


Lesenswert?

Hallo,

so weit so gut.

Doch wieso ändert sich der Wert der Variable von Spannung die ganze Zeit 
? Eigentlich sollte sie doch nur in der einen Zeile gesetzt werden.

von Spess53 (Gast)


Lesenswert?

Hi

>Doch wieso ändert sich der Wert der Variable von Spannung die ganze Zeit
>? Eigentlich sollte sie doch nur in der einen Zeile gesetzt werden.

Dann teste doch mal auf Assemblerebene (Disassembler Window).

MfG Spess

von Wusel D. (stefanfrings_de)


Lesenswert?

Deaktiviere mal den Optimizer mit -O0. Der Debugger tut sich schwer mit 
optimiertem Code, teilweise existieren die Variablen nach der 
Optimierung ncht mehr, so dass man sie auch nicht anzeigen kann. Der 
Optimizer ersetzt Variablen gerne durch Register.

von muhkuh1206 (Gast)


Lesenswert?

Das mit dem Assembler hab ich nicht ganz hinbekommen, so dass es mir 
iwie weitergeholfen hätte..

Hab mal das optimieren ausgemacht, da hat sich wenig verändert.
Zwar die Zahlen aber das eigtl Problem, dass da einfach welche 
reinkommen obwohl es am Anfang mit 0 initialisiert wird (oben nicht im 
code)

und dann ja nur später = ADC

von Spess53 (Gast)


Angehängte Dateien:

Lesenswert?

Hi

>Das mit dem Assembler hab ich nicht ganz hinbekommen, so dass es mir
>iwie weitergeholfen hätte..

Was hast du nicht hinbekommen? Diesen Knopf zu drücken?

MfG Spess

von Wusel D. (stefanfrings_de)


Lesenswert?

Hast Du das Programm vielleicht für einen anderen AVR (falschen) 
compiliert, so dass er jetzt glaubt die Variable säße auf einer freien 
RAM Zelle, wo in wirklichkeit ein funktionales Register liegt?

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.