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 ;-)
Das geht mit DebugWire, 1-Draht-Anschluß am Reset-Pin. Dazu brauchst Du als Minimalausrüstung einen AVR Dragon und AVR-Studio oder avarice.
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.
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.
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.
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
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.
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
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.
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...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.