Forum: Mikrocontroller und Digitale Elektronik Wie kann ich debuggen


von Bastelphilipp (Gast)


Lesenswert?

Ich baue eine kleine Schaltung mit einem ATtiny 25
Zwei Portleitungen sind Digital-Input, zwei Portleitungen sind 
Analog-Input, die verbliebene Portleitung steuert über einen Transistor 
ein Relais.
Wie kann ich zum Debuggen sehen, was mein µC gerade macht, ob er 
Berechnungen so macht wie ich das will?

Leider hat sich in der Vergangenheit gezeigt, der µC macht das was ich 
programmiere, nicht das, was ich will   ;-)

von Hc Z. (mizch)


Lesenswert?

Das geht mit DebugWire, 1-Draht-Anschluß am Reset-Pin.  Dazu brauchst Du 
als Minimalausrüstung einen AVR Dragon und AVR-Studio oder avarice.

von Purzel H. (hacky)


Lesenswert?

Was bringt es 50 cents an einer CPU zu sparen, wenn man sich dabei das 
Debuggen erschwert/verunmoeglicht ? Unter einer Mega32 macht es keinen 
Sinn. Fuer mich persoenlich macht es unter einer Mega644 keinen Sinn. 
Ich mag es ein paar unbenutzte Pins zu haben und das UART auch noch 
gebrauchen zu koennen. Der 644 hat ein extra UART.
Nehmen wir einen grosszuegigen Preisunterschied von 2 Euro. Bei 100 
Stueck ist die Ersparnis gerade mal 200 Euro. Das reicht grad fuer einen 
Nachmittag Debuggen. Klopp den Tiny25 in die Tonne. Das ist was fuer 
ganz grosse Serien. Ab 5000 Stueck kann man langsam darueber nachdenken.

von Bastelphilipp (Gast)


Lesenswert?

A...aha Soooo. schrieb:
> Klopp den Tiny25 in die Tonne.

Ich brauche den Gain * 20 für die Analogeingänge.
Sowas haben die ATmegas nicht.

von Karl H. (kbuchegg)


Lesenswert?

Man kann ja auch erst mal mit einem größeren AVR (mit mehr Pins) das 
Programm entwickeln. Dann stehen einem viele Debug-Möglichkeiten offen. 
Und erst dann, wenn das meiste Debuggt ist, wechselt man auf die 
Zielhardware mit den eingeschränkten Möglichkeiten und stellt dort dann 
den Rest fertig. Eventuell kann man ja auch temporär zu Debug Zwecken 
irgendeinen Ausgang zweckentfremden und an dem eine LED anschliessen 
oder sowas.

von Mausejule (Gast)


Lesenswert?

Bastelphilipp schrieb:
> Ich brauche den Gain * 20 für die Analogeingänge.
> Sowas haben die ATmegas nicht.

ATMega164A/324A/644A:
>8-channel, 10-bit ADC
>Differential mode with selectable gain at 1x, 10x or 200x

von Bastelphilipp (Gast)


Lesenswert?

Mausejule schrieb:
>>Differential mode with selectable gain at 1x, 10x or 200x

Ich brauche genau 20x  ... sorry

Kann man so ein C-Programm eventuel mit AVR-Studio4 auch ohne Hardware 
debuggen?
Siehe Beitrag "10 * 10 Bit multiplizieren"
um die 10 * 10 Bit Multiplikation zu testen.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Bastelphilipp schrieb:
> Ich brauche genau 20x  ... sorry

200x / 10 = 20x
"/10" = Spannungsteiler

von Purzel H. (hacky)


Lesenswert?

Eine 10x10 Multiplikation kann man auch am Simulator testen.

von Peter D. (peda)


Lesenswert?

A...aha Soooo. schrieb:
> Unter einer Mega32 macht es keinen
> Sinn. Fuer mich persoenlich macht es unter einer Mega644 keinen Sinn.

Das ist nur Deine rein persönlich Meinung, die mußt Du aber nicht 
anderen aufzwingen.

Es macht durchaus Spaß, nen 8-Pinner zu programmieren und nicht ein 
riesen Kuchenblech aufbauen zu müssen.

Man kann auch 8-Pinner gut debuggen.


Eine Möglichkeit ist eine UART für Debugausgaben:
1
void sputchar( uint8_t c )
2
{
3
  c = ~c;
4
  STX_PORT &= ~(1<<STX_BIT);            // start bit
5
  for( uint8_t i = 10; i; i-- ){        // 10 bits
6
    _delay_us( 1e6 / BAUD );            // bit duration
7
    if( c & 1 )
8
      STX_PORT &= ~(1<<STX_BIT);        // data bit 0
9
    else
10
      STX_PORT |= 1<<STX_BIT;           // data bit 1 or stop bit
11
    c >>= 1;
12
  }
13
}

Man kann vieles aber auch simulieren.


Und das beste Debugwerkzeug ist immer noch das systematische Herangehen.
Man schreibt erstmal so präzise wie möglich auf, was soll das Programm 
machen. Und dann untersucht man, wann weicht es ab und wie weicht es ab.


Und man kann auch alle 6 IO-Pins nutzen, wenn man einen Bootloader 
reinprogrammiert.


Peter

von Hc Z. (mizch)


Lesenswert?

Was soll daran falsch sein, einen Tiny zu debuggen?  DebugWire ist im 
Single Step zwar langsamer als JTAG und kann etwas weniger, aber 
Geschwindigkeitsrekorde bricht man während des Debuggens eh nicht; der 
Erkenntnisgewinn wiegt das auf oder man braucht gar keinen 
Hardware-Debugger.

Wozu so einen großen Pflätscherich reinstecken, solange es ein kleiner 
und feiner Winzling tut?  Das bisschen Mehr beim Debuggen wiegt das 
nicht auf.

von Bastelphilipp (Gast)


Lesenswert?

A...aha Soooo. schrieb:
> Eine 10x10 Multiplikation kann man auch am Simulator testen.

Genau das war der Kernpunkt meiner Frage.
Wie kann ich ATtiny C Programme simulieren?
Es kommmt mir dabei gar nicht auf die Echtzeitsimulation von Peripherie 
an, sondern nur, ob bestimmte Berechnungen so funktionieren.
Fehler die sich gerne einschleichen wie z.B.
1
unsigned short integer ADC_Wert; //ADC rechtsbündig = 10 Bit
2
unsigned long integer Ergebnis;
3
Ergebnis = ADC_Wert * ADC_Wert; // oh shit die oberen 4 Bit sind weg :-(
müsste man so vermeiden, indem man die Berechnungen mit ein paar 
Testwerten überprüfen könnte...

von Karl H. (kbuchegg)


Lesenswert?

Bastelphilipp schrieb:
> A...aha Soooo. schrieb:
>> Eine 10x10 Multiplikation kann man auch am Simulator testen.
>
> Genau das war der Kernpunkt meiner Frage.
> Wie kann ich ATtiny C Programme simulieren?
> Es kommmt mir dabei gar nicht auf die Echtzeitsimulation von Peripherie
> an, sondern nur, ob bestimmte Berechnungen so funktionieren.

Es gibt ja immer noch den im AVR-Studio integrierten Simulator.
Wundert mich eigentlich, dass du den nicht kennst. Programm compilieren 
und dann im Menüpunkt "Debug" im Simulator das Programm simuliert 
starten.

von Bastelphilipp (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Programm compilieren
> und dann im Menüpunkt "Debug" im Simulator das Programm simuliert
> starten.


Du bist ein Schatz!
Fühl dich gedrückt!
Wenn du jetzt da wärst, würd ich
auf dem Weihnachtsmarkt eine Runde Hustensaft ausgeben

> Wundert mich eigentlich, dass du den nicht kennst.
Allein hätte ich mich nie getraut da mal zu klicken...

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.