Forum: Mikrocontroller und Digitale Elektronik Keine Spannung (AVR-GCC-Tutorial: Einführungsbeispiel)


von Winthrop (Gast)


Lesenswert?

Hallo,

ich versuche grade das AVR-GCC Tutorium durchzuarbeiten, aber bleibe 
leider schon beim ersten Codebeispiel hängen.
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Einf.C3.BChrungsbeispiel

Das ist der C-Code, den ich versuche, zum Laufen zu bringen:
1
#include <avr/io.h>          // (1)
2
 
3
int main (void) {            // (2)
4
 
5
   DDRB  = 0xff;             // (3)
6
   PORTB = 0x03;             // (4)
7
 
8
   while(1) {                // (5a)
9
     /* "leere" Schleife*/  // (5b)
10
   }                         // (5c)
11
 
12
   /* wird nie erreicht */
13
   return 0;                 // (6)
14
}

Mit einem Multimeter hab ich folgende Spannungen gemessen (von VCC aus):
1
PC6 (RESET)     0,24V
2
PD0-PD4         0V
3
VCC             -
4
GND             3,22V
5
PB6 (TOSC1)     2,35V
6
PB7 (TOSC2)     2,68V
7
PD5             0V
8
PD6             0,25V
9
PD7             0,24V
10
PB0             0V
11
12
PC5-PC0         0,30V
13
GND             3,22V
14
AREF            0,30V
15
AVCC            0,69V
16
PB5-PB1         0V

Sollte bei PB0 und PB1 nicht Betriebsspannung anliegen?
Ich habe einen Quarz an TOSC1/TOSC2 angeschlossen und eine Brücke 
zwischen GND (Pin8) und GND (Pin22) gesetzt.

Das Beispiel habe ich schon einmal zum Laufen gebracht, aber irgendwas 
mache ich wohl falsch.
Wäre schön, wenn jemand einem Anfänger helfen könnte.
Danke

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> VCC             -
> GND             3,22V

Das ist übel.

Überprüfe deine Schaltung und/oder deine Art zu messen (Verkabelung 
Multimeter, Messpunkte an der Schaltung).

COM (Konvention schwarze Messleitung) vom Multimeter an GND, V 
(Konvention rote Messleitung) vom Multimeter an den zu untersuchenden 
Messpunkt. Multimeter in DCV (Gleichspannung) Einstellung im Messbereich 
>5V z.B. 20V Messbereich.

von Winthrop (Gast)


Lesenswert?

> VCC             -
weil ich von hier aus messe.

> GND             3,22V
das müsste dann doch meine Betriebsspannung sein? Also von VCC zu GND.

Ich messe jeweils an den "Beinchen" des Controllers.
Mach ich dabei schon was falsch?

von Markus E. (engelmarkus)


Lesenswert?

Wenn du von VCC aus misst, dann heißt das für mich, dass du die schwarze 
Leitung an VCC hältst und die rote an GND. Dann müssten es aber -3,22V 
sein...

von Winthrop (Gast)


Lesenswert?

> COM (Konvention schwarze Messleitung) vom Multimeter an GND, V
> (Konvention rote Messleitung) vom Multimeter an den zu untersuchenden
> Messpunkt. Multimeter in DCV (Gleichspannung) Einstellung im Messbereich
>>5V z.B. 20V Messbereich.

> Wenn du von VCC aus misst, dann heißt das für mich, dass du die schwarze
> Leitung an VCC hältst und die rote an GND. Dann müssten es aber -3,22V
> sein...

Ahhh OK. Dann hab ich falsch gemessen (falsche Richtung und von VCC).
Hier sind die Messergebnisse von GND aus:
1
RESET        2,77V
2
PD0-PD4      0V
3
VCC          3,23V
4
GND          -
5
TOSC1        0,79
6
TOSC2        0,57
7
PD5-7        0V
8
PB0          0V
9
10
PC5-PC0      0V
11
GND          0V
12
AREF         0V
13
AVCC         2,54V
14
PB5-PB1      0V

Falls es relevant ist: ich benutze einen ATMEGA328P-PU.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Winthrop schrieb:

> VCC          3,23V

d.h. Deine Platine versorgt den AVR mit ca. 3.3V. Schafft es dein 
ISP-Programmer (welcher?) ein 3.3V System zu programmieren?

Bist du sicher, dass das Programm im ATMEGA328P-PU ist? Eventuell zur 
Kontrolle mal auslesen und das ausgelesene HEX-File posten.

> TOSC1        0,79
> TOSC2        0,57

Externe Taktquelle angeschlossen? Mit einem Multimeter kannst du das 
nicht vernünftig messen, ja es besteht sogar die Gefahr, dass du durch 
die MEssung die Taktrate stark veränderst.

> AVCC         2,54V

Etwas mager - das sollte Vcc oder in der Nähe von Vcc sein.

>>   PORTB = 0x03;             // (4)
> PB0          0V
> PB5-PB1      0V

d.h. Erwartet wird an PB0 und PB1 ein HIGH Pegel. Die sind nicht 
vorhanden. Ist an diesen Pins noch etwas angeschlossen?

von Winthrop (Gast)


Angehängte Dateien:

Lesenswert?

> d.h. Deine Platine versorgt den AVR mit ca. 3.3V. Schafft es dein
> ISP-Programmer (welcher?) ein 3.3V System zu programmieren?

Verwende einen AVRISP mkII.
Ich gehe davon aus, dass er das kann, da ich den gleichen Kreislauf 
schonmal vor einigen Monaten erfolgreich mit derselben Hardware getestet 
habe.

> Bist du sicher, dass das Programm im ATMEGA328P-PU ist? Eventuell zur
> Kontrolle mal auslesen und das ausgelesene HEX-File posten.

Es kommt mir so vor, weil, wenn ich im AVRStudio im Verbindungsdialog 
zum Chip auf "Verify" klicke, bekomm ich keine Fehlermeldung.
Um den Code zu kompilieren und auf das Gerät zu laden, gehe ich so vor:
1. Compile Active File (Alt+F7)
2. Write Flash Memory Using Current Settings

Die HEX-Datei ist im Anhang.

>> TOSC1        0,79
>> TOSC2        0,57
>
> Externe Taktquelle angeschlossen? Mit einem Multimeter kannst du das
> nicht vernünftig messen, ja es besteht sogar die Gefahr, dass du durch
> die MEssung die Taktrate stark veränderst.

D.h. wenn ich Pech hab, ist jetzt der Quarz kaputt?

>> AVCC         2,54V
>
> Etwas mager - das sollte Vcc oder in der Nähe von Vcc sein.

Bin mir nicht ganz sicher, aber irgendwo habe ich gelesen, dass es Sinn 
macht zwischen VCC und AVCC eine Brücke zu machen. Stimmt das?

>>>   PORTB = 0x03;             // (4)
>> PB0          0V
>> PB5-PB1      0V
>
> d.h. Erwartet wird an PB0 und PB1 ein HIGH Pegel. Die sind nicht
> vorhanden. Ist an diesen Pins noch etwas angeschlossen?

Nein, es ist nichts angeschlossen. Habe nur mit dem Multimeter gemessen, 
ohne, dass es sonst eine Verbindung gibt.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> 1. Compile Active File (Alt+F7)
> 2. Write Flash Memory Using Current Settings

Beitrag "Re: ATMega16-16 macht nichts!"

Mach noch einen Schritt 1,5: Pfad zum erzeugten HEX-File angeben/zeigen. 
Eventuell flashst du dauernd das Hexfile vom Vorgängerprojekt...

>>> AVCC         2,54V
>> Etwas mager - das sollte Vcc oder in der Nähe von Vcc sein.
> Bin mir nicht ganz sicher, aber irgendwo habe ich gelesen, dass es Sinn
> macht zwischen VCC und AVCC eine Brücke zu machen. Stimmt das?

Jo. Brücke oder, wie Atmel in den Hardwaretips (=> Appnote suchen) an 
gibt, eine Induktivität, um Störungen auf dieser Leitung zu 
glätten/filtern.

Ist die angehängte HEX-Datei die ausgelesene Datei oder die zu flashende 
Datei?

von Winthrop (Gast)


Lesenswert?

> Mach noch einen Schritt 1,5: Pfad zum erzeugten HEX-File angeben/zeigen.

X:\programmaen\src\BlinkenLights_v1\default\BlinkenLights_v1.hex

Also das müsste die richtige Datei sein.

> Jo. Brücke oder, wie Atmel in den Hardwaretips (=> Appnote suchen) an
> gibt, eine Induktivität, um Störungen auf dieser Leitung zu
> glätten/filtern.

Ahhh prima. Jetzt ist bei beiden genau gleich viel Spannung (3,22V).

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Die HEX-Datei macht im Simulator genau das, was ich von dem 
Einführungsbeispiel im AVR-GCC-Tutorial erwarte.

Du musst es "nur" schaffen genau diese Datei in deinen AVR zu flashen. 
Da auch der Hinweis auf den AVR Studio Nervbug mit dem Pfad. Die 
richtige Datei muss im Programmierdialog angegeben werden. Ich benutze 
AVR Studio nicht zum ISP-Programmieren und kann da nicht helfen.

Wenn du bereits den AVR ausgelesen hast und die HEX-Datei der 
ausgelesene Inhalt ist, ist etwas oberfaul.

von Winthrop (Gast)


Lesenswert?

Hab grad den µc gewechselt. Komischerweise gehts jetzt.
Auch wenn ich wieder den alten Chip zurücksteck.
Vielleicht wars ein Wackelkontakt?
Keine Ahnung, aber es geht jetzt endlich!

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.