Forum: Compiler & IDEs Attiny44 Problem mit Watch im Debugwiremodus


von vaid (Gast)


Lesenswert?

Hallo!

Ich nutze den CodeVisionAVR Compiler und debugge dann im neuesten AVR 
Studio. µC ist ein ATtiny44.
Beim Debuggen habe ich folgendes Problem (Code aufs wesentliche 
gekürzt):
1
eeprom unsigned char table[64] =
2
    { Wert0,....Wert63 }; //64 Werte zu Verarbeitung des ADC Wertes
3
4
unsigned char read_adc(void)
5
{
6
  [...] //AD-Wandlung
7
8
  adc  = ADCH;
9
  adc  = table[adc/4];
10
  
11
}

Die AD-Wandlung funktioniert super, der adc Wert wird in der Watch 
gescheit angezeigt. Steppe ich nun einen Schritt weiter wird adc aber 
immer zu 0xFF, ganz egal welcher Wert bei der AD-Wandlung herausgekommen 
ist.
Eigentlich müsste aber doch der Wert der an der Array-Stelle hinterlegt 
ist angezeigt werden.
Warum ist das so ? g
Könnte mir vorstellen, dass die EEPROM Tabelle nicht berücksichtigt 
wird?
Oder falsches Zusammenspiel von Codevision und AVR Studio 
(unwahrscheinlich).

Der Code funktioniert übrigens wenn Debugwire nicht aktiviert ist. 
Hardwarefehler schließe ich vorsichtig aus. Nach Masse ist kein 
Kondensator, nur ein 7kOhm Widerstand nach Vcc (ich weiss, sollten 10 
sein aber es tut..)

Vielen Dank für eure Mühen!

von vaid (Gast)


Lesenswert?

Habe noch vergessen zu erwähnen, dass das kein Anzeigefehler ist. Der 
Code reagiert so, als ob im Register tatsächlich 0xFF steht.

von Barny (Gast)


Lesenswert?

Wenn ich dass wichtig sehe, steht in der Variable adc immer der Wert von 
table[0]

Denn du machst nichts anderes, als die oberen 2 Bit's des ADC's 
auszulesen, diesen Wert drch 4 zu teilen und dann das Ergebnuis als 
Array-Position zu verwenden.

in ADCH können nur die Werte 0, 1, 2 oder 3 stehen.
Alle Werte ergeben durch 4 geteilt 0.
Ich glaube nicht, dass du dass so machen willst.

von vaid (Gast)


Lesenswert?

Barny schrieb:
> Wenn ich dass wichtig sehe

Schön geschrieben :)

Stimmt aber leider nicht. Wie gesagt, der Wert in ADC ist korrekt. Auch 
ist table[0] nicht 0xFF.

Sonst noch jemand?

von Peter D. (peda)


Lesenswert?

Beim Debuggen wird ja das Programm immer neu geladen.
Warscheinlich fehlt da das Laden des EEPROM und daher bleibt er 
gelöscht.

Warum legst Du das Array nicht in den Flash?
Ist schneller und weniger Code.


Peter

von vaid (Gast)


Lesenswert?

Das hat(te) historische Gründe. Ursprünglich wars der Tiny24 und da war 
Programmplatz knapp. Wollte das ganze nun eh anders machen, war aber 
über den "Fehler" verwundert.

Sollte noch jemand ne Idee haben ... Interesse habe ich immernoch!

von Peter D. (peda)


Lesenswert?

Wie gesagt, warscheinlich gibts im Debugger irgendwo ne Einstellung, daß 
auch der EEPROM geladen wird. Und die wird wohl per default aus sein.


Peter

von vaid (Gast)


Lesenswert?

Besten Dank!
Gab ne Funktion Up/Download Memory in der man das EEPROM beschreiben 
kann. Nun gehts. :)

Achja, Programmer ist der JTAGICE MKII Clon von Futureelectronics falls 
mal jemand das selbe Problem hat.

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.