Forum: Mikrocontroller und Digitale Elektronik AT90 schließt VCC und GND kurz


von Alexander T. (alext)


Lesenswert?

Hallo zusammen,

ich habe einen AT90USB1287 in meine Schaltung integriert.
Bei Spannungsfreiheit habe ich zwischen VCC und GND einen Widerstand von 
5,2 kOhm.
Schließe ich VCC=5V an habe ich laut Messgerät einen Kurzschluss 
zwischen VCC und GND. Es fließt jedoch nur ein Strom von 3 uA 
(niedrigste Auflösung des Multimeters). Der AT90 reagiert auch nicht wie 
gewünscht...

Woran kann das liegen?

Löttechnisch habe ich keine Kurzschlüsse ermitteln können (mit 
Mikroskop). Mein Betreuer meint auch, das sähe "ganz ok" aus.

Kann man da programmiertechnisch etwas machen?

Ich habe gelesen, dass der ADC am Port A manchmal rumzickt. Weiß nicht, 
ob das hier zum tragen kommt. Ich habe AVCC=AREF=VCC geschaltet, habe 
aber mittels

ACSR &= ~(1<<ACIE);
ACSR |= (1<<ACD);
ADCSRA &= ~(1<<ADEN);

den ADC abgeschaltet. Der "sollte" nun also nicht mehr stören.

Hat jemand eine Idee?
Danke schonmal vorab für Eure Hilfe.

Alex

von TheMason (Gast)


Lesenswert?

hast du ohmsch zwischen vcc und gnd gemessen bei anliegender spannung ?!
also da würde ich mal sagen kann man von ausgehen das es nicht 
funktioniert.
einen widerstand unter spannung per multimeter zu messen geht nicht 
(jedenfalls nicht mit der widerstandsmessung).

und was heißt :

>Der AT90 reagiert auch nicht wie gewünscht...

was wünscht du dir denn an reaktion ?
liegen die takte an ?
kannst du das dingen programmieren ?

prüf das erst mal alles.

btw. : wenn du das teil programmieren kannst, kannst du keinen 
kurzschluß haben (es sei denn du ziehst einen port-pin auf 0, den du 
direkt mit vcc verbunden hast, aber dann hättest du keinen strom von 
3uA)

von johnny.m (Gast)


Lesenswert?

Da kann ich TheMason nur beipflichten: In der Bedienungsanleitung eines 
Multimeters steht i.d.R. drin, dass bei einer Widerstandsmessung die zu 
messenden Teile spannungsfrei sein müssen. Aber Bedienungsanleitungen 
liest ja eh keiner...

von Ohmmeter (Gast)


Lesenswert?

Kenntnisse der Elektrotechnik????
Wer alles so mit Strom hantiert!

von Alexander T. (alext)


Lesenswert?

Hallo nochmal,

das mit dem Messen unter Spannung seh ich ein. Hab ich wohl vorschnell 
geurteilt.

> was wünscht du dir denn an reaktion ?
> liegen die takte an ?
> kannst du das dingen programmieren ?

Programmieren kann ich. Zumindest sagt mein AVR Studio nix 
Gegenteiliges. Ich kann auch die Spannung am AT90 auslesen. Kein 
Problem.

16 MHz liegen auch an (Quarz).

Mein Programm ist denkbar simpel:

#include <avr/io.h>
#define F_CPU 1600000UL

int main()
{
DDRA  = 0xFF;
PORTA = 0xFF;
while(1)
{
}
return(0);
}

So sollten doch jetzt an allen PortA-Pins 5 V anliegen. Statt dessen 
rippeln die immer im 300 mV herum un springen alle 1,5 s auf etwa 1,35 
V.

Das ist so nicht gewünscht...

Was ist das?

MfG

Alex

von Stefan Salewski (Gast)


Lesenswert?

Dass Du mit dem Multimeter nicht im Widerstandsbereich messen darfst, 
wenn das Gerät unter Spannung steht, hatte ich Dir bereits vor 2 Wochen 
geschrieben.

Wenn Du keinerlei elektrische Grundkenntnisse hast, ist der Aufbau einer 
Platine mit dem AT90USB für dich nicht unbedingt zu empfehlen. Der 
AT90USB ist vermutlich nicht so robust, dass er beliebige Kurzschlüsse 
oder Verpolungen völlig unbeschadet wegsteckt. Ich habe mit dem At90USB 
mehrere Platinen aufgebaut und keine Probleme. Vielleicht solltest Du 
Dir das STK525 kaufen, oder lass die Platine von jemanden aufbauen, der 
sich damit auskennt.

Ich hatte Dir auch empfohlen, den Schaltplan zugänglich zu machen, damit 
wir hier nicht herumrätseln müssen!

Gruß

Stefan Salewski

von Prof. Y (Gast)


Lesenswert?

Währe ein Projekt mit 4,5V Flachbatterie, einem Schalter und einem 
Lämpchen nicht besser?????

Nur so zur Übung????

von Stefan Salewski (Gast)


Lesenswert?

Muss es statt

int main()

nicht

int main(void)

heißen?

von Alexander T. (alext)


Lesenswert?

ob mit void oder ohne ist egal. void gibt ja nur an, dass von dieser 
Funktion kein Wert zurückkommt.
Funktioniert mir und ohne void genauso.

von Prof. Y (Gast)


Lesenswert?

C Kenntnisse mal überdenken???

von Karl H. (kbuchegg)


Lesenswert?

Stefan Salewski wrote:
> Muss es statt
>
> int main()
>
> nicht
>
> int main(void)
>
> heißen?


da es sich bei

int main()
{
 ...
}

um die Funktionsdefinition handelt und nicht um einen
Prototypen, ist beides gleichwertig.

Ausserdem hat das mit Sicherheit nichts mit dem geschildertem
Problem zu tun.

von Stefan Salewski (Gast)


Lesenswert?

> int main()

In der Klammer steht die Parameterliste. Der zurückzugebene Wert steht 
ganz am Anfang (links), bei dir int.

Eine leere Parameterliste war zumindest früher in C bei 
Funktionsdefinitionen nicht erlaubt -- aber je nach Compiler mag das ok 
sein.

von Alexander T. (alext)


Angehängte Dateien:

Lesenswert?

hier mal die schaltung...

von Stefan Salewski (Gast)


Lesenswert?

Also auf meiner AT90USB-Platine funktioniert Dein Programm,
LED an Pin0 von Port A leuchtet.

von Alexander T. (alext)


Lesenswert?

verdammt. also cutte ich AREF von VCC. Sollte ich den Pin einfach 
freihängen lassen oder lieber wie du mittels Kondi auf Masse legen?

von Karl H. (kbuchegg)


Lesenswert?

Stefan Salewski wrote:

> Eine leere Parameterliste war zumindest früher in C bei
> Funktionsdefinitionen nicht erlaubt

Ich denke du verwechselst da irgendwas.
leere Parameterlisten bei Funktionsdefinition sind seit
Urzeiten in C absoluter Usus. Warum auch nicht? Ihre
Semantik ist absolut eindeutig.

Lediglich bei Funktionsprototypen
int foo();
gibt es eine 2-Deutigkeit. Ist das jetzt eine Funktion deren
Argumentliste laut alter K&R Definition unspezifiziert ist
oder ist das der Prototyp einer Funktion die keine Argument
annimmt. Um diese 2-Deutigkeit aus der Welt zu schaffen
wird in so einem Fall der Prototyp als
int foo(void);
geschrieben um anzuzeigen, dass die Funktion tatsächlich
keine Argumente nimmt. Das ist aber nur bei Deklarationen
(also bei Prototypen) notwendig. Bei einer Funktionsdefinition
hat es diese Unstimmigkeit nie gegeben.

Wir sollten uns aber besser auf das Problem vom Alexander
konzentrieren. Die Argumentliste von main() hat da nichts
damit zu tun.




von tom (Gast)


Lesenswert?

mit Kondensator kannst du nix auf Masse legen

von Sardaukar (Gast)


Lesenswert?

Zum Problem zurück...

hast Du die Fuse-Bits auch richtig eingestellt?
Wenn der Watchdog an ist, dann könnte evtl. schon nach kurzer 
Programmlaufzeit das Teil beissen und die Ausgänge für eine gewisse Zeit 
hochohmig werden (was dem Resetzustand entspricht).

Kontrollier mal das bzw. trigger den Watchdog in Deiner while( 1 );

von Stefan Salewski (Gast)


Lesenswert?

@tom
>mit Kondensator kannst du nix auf Masse legen

Na das geht jetzt aber in Richtung Haarspalterei, was
Alexander meinte ist schon klar.

@ Karl heinz Buchegger
Danke für den Hinweis -- bei mir war irgendwie im Hinterkopf, dass man
immer dieses (void) benötigt, und ich habe es bisher immer verwendet.
C war nie meine Lieblingssprache -- daher habe ich nie versucht, alle 
Feinheiten zu lernen. Gut, habe wieder was dazugelernt.

@Alexander
AREF kannst Du ganz offen lassen.
Die Versorgungsspannung VCC ist stabil +5V?

von Alexander T. (alext)


Lesenswert?

watchdog ist laut fuses aus...

von Stefan Salewski (Gast)


Lesenswert?

An Watchdog und Brownout hatte ich auch schon gedacht --
in der Tat, man kann beide per Fuses einschalten.
Also beides kontrollieren.

von Sardaukar (Gast)


Lesenswert?

Kannst Du (zur Sicherheit) vor der while( 1 ) die folgenden Zeilen 
einfügen:
WDTCR = 0x18;
WDTCR = 0x00;
PORTA ^= 0x01;
PORTA ^= 0x01;
PORTA ^= 0x01;
PORTA ^= 0x01;
PORTA ^= 0x01;
PORTA ^= 0x01;
PORTA ^= 0x01;
PORTA ^= 0x01;
PORTA ^= 0x01;
PORTA ^= 0x01;

in der while( 1 ):
asm( "WDR" );
PORTA ^= 0x02;


und dann mit einem Oszi auf Single Shot auf PortA.1 messen.
Wenn das das gewünschte Ergebnis bringt, dann den Trigger wieder auf 
normal stellen und PortA.2 messen.
Sollte auch toggeln.

von Alexander T. (alext)


Lesenswert?

watchdog ist aus. brownout auf 2,6 V...

von Stefan Salewski (Gast)


Lesenswert?

>Ich habe gelesen, dass der ADC am Port A manchmal rumzickt. Weiß nicht,
>ob das hier zum tragen kommt. Ich habe AVCC=AREF=VCC geschaltet, habe
>aber mittels

Der ADC (Analog-Digital-Converter) liegt beim AT90USB übrigens nicht an 
PortA. PortA ist für das externe Speicherinterface.
Aber das hilft Dir leider auch nicht weiter.

Probier mal den Vorschlag von  Sardaukar.

von Alexander T. (alext)


Lesenswert?

WDTCR kennt er nicht.
muss da noch eine spezielle ".inc" eingebunden werden?

von Sardaukar (Gast)


Lesenswert?

Welche Entwicklungsumgebung hast Du denn?
Im AVR Studio kennt er das anstandslos (at90can_drv.h verwendet das 
auch).
Lass einfach (nur zum Test) das ganze Zeugs mit dem Watchdog weg und 
schau Dir nur die Portleitungen am Oszi an.
Ich befürchte halt, dass Deine Kiste gar nicht hochkommt. Dann hilft 
wohl nur der Marsch in die Hardwareabteilung....

Eventuell kannst Du Deine Fusebits mal posten.

von Sardaukar (Gast)


Lesenswert?

das #define wäre in der iocanxx.h drin btw. (im WinAVR-Verzeichnis)

von Stefan Salewski (Gast)


Lesenswert?

Ein Unterschied zwischen meinen Platinen und deiner ist übrigens, dass 
bei mir stets der Atmel-USB-Bootloader vorhanden ist. Ich lade mein (und 
dein) Programm per DFU-Programmer ein -- es steht daher im Speicher an 
einer anderen Stelle als bei Dir. Ich kann momentan nicht sicher sagen, 
ob das irgendeinen Unterschied machen kann.

Zum Probieren: Ich würde mich nicht an PortA festbeißen, sondern mal 
probieren, ob der Controller irgendetwas sinnvolles/sichtbares machen 
kann.


von Alexander T. (alext)


Lesenswert?

bei mir heißt das wohl WDTCSR (iousbxx6_7.h).
Ich nutze AVR-Studio 4.12 SP 4.
Das mit dem OSZI mach ich nachher noch. Der ist grad beim griechischen 
Kollegen in Beschlag. Ich geb Euch dann mal bescheid.
Danke erstmal.

Alex

PS: Ich hab mal AREF von VCC getrennt. Geändert hat sich nix, außer dass 
jetzt an AREF das gleiche Signal wie an Port A anliegt. Heißt das was?`
PPS: Falls mein uC kaputt ist, woran könnte es gelegen haben? Hab ich da 
grundsätzlich etwas falsch gemacht?

von Sardaukar (Gast)


Lesenswert?

Ich glaub nicht, dass das was heißt (im aktuellen Kontext). Dass diese 
µC sterben wie die Fliegen will ich jetzt nicht behaupten, aber beim 
Entwickeln habe ich schon ein paar ins Jenseits befördert, aus den 
unterschiedlichsten Gründen, also nicht nur weil ich Bier/Kaffee/einen 
Klaren drübergeschüttet oder mit dem Tastkopf gleich 3 Pins 
kurzgeschlossen hab.

von Stefan Salewski (Gast)


Lesenswert?

>Das mit dem OSZI mach ich nachher noch.

Du hast also bisher alles mit dem Multimeter gemessen?
Das ist wenig aussagekräftig.

Ich hatte ja gefragt: VCC ist +5V -- natürlich meinte ich mit 
Oszilloskop gemessen.

>Falls mein uC kaputt ist, woran könnte es gelegen haben?
Verpolung, Kurzschluss, Überspannung, ESD, Hitze (Löten) ...

von Stefan Salewski (Gast)


Lesenswert?

>watchdog ist aus. brownout auf 2,6 V...

Brownout würde ich ganz abstellen,
siehe Datenblatt Seite 62:
BODLEVEL 2..0 Fuses 111

von yalu (Gast)


Lesenswert?

Noch ein paar weitere Vorschläge ins Blaue:

- Bist du sicher dass das, was du geflasht hast, auch wirklich dem
  obigen Quellcode entstammt? Sicherheitshalber noch einmal alles neu
  compilieren.

- Hast du beim Compilieren und Flashen den richtigen Controllertyp
  angegeben?

- Lässt dein Programmmer die Resetleitung nach erfolgter
  Programmierung wirklich los (geht sie auf 5V-Pegel zurück)? Sonst
  ist dein Programmer hinüber oder du hast einen Kurzschluss auf der
  Resetleitung.

- Hast du's mal auf anderen Ports probiert? Mit einem anderen
  Controller (ok, der wird vielleicht nicht so leicht auszutauschen
  sein)? Oder mit einem zweiten Board (sofern verfügbar)?

von Stefan Salewski (Gast)


Lesenswert?

Noch eine Idee -- was meinen die Experten dazu:
Mein AT90USB springt bei einem normalen Reset nicht in den 
USB-Bootloader, sondern ins Anwendungsprogramm. In den Bootloader komme 
ich nur, wenn ich beim Reset Pin PE2 auf Masse lege. Könnte es sein, 
dass Alexander sein Anwendungsprogramm dorthin lädt, wo bei mir der 
Bootloader steht, beim Reset dann aber in einen Bereich gesprungen wird, 
wo gar kein Programm steht?

@Alexander:
Hast Du mit Verfy programmiert?
Du könntest die Fuses mal so umstellen, dass nicht der externe Quarz, 
sondern der interne (1MHz) Oszillator verwendet wird.

von Stefan Salewski (Gast)


Lesenswert?

Ich glaube meine Idee war nicht völlig abwegig.
Vielleicht mal die Boot Reset Fuse ändern, oder während des RESET
Pin PE2 (über Schutzwiderstand, einige kOhm) auf Masse legen.

Keiner der Experten mehr wach?

Gruß

Stefan Salewski

von Stefan W. (wswbln)


Lesenswert?

Alexander T. wrote:
> watchdog ist aus. brownout auf 2,6 V...

...und CKOPT (so der AT90USB1287 die hat) gesetzt?
Sonst hast Du einen extrem stromsparenden (Vittoz-)Oszillator, der nur 
mit speziellen Quarzen sicher funktioniert und mit ungeeigneten 
(normalen)Quarzen mitunter die (nicht wirklich) lustigsten Effekte 
verursacht.

von Stefan Salewski (Gast)


Lesenswert?

CKOPT hat der AT90USB soweit ich weiss nicht, dafür aber
CKSEL3..1

Nach Datenblatt sollen diese Bits vorgabemäßig so stehen, dass der 
interne 1MHz Oszillator aktiv ist. Aber das ist wohl falsch und wäre 
auch unsinnig, da USB nur mit externem Quarz funktioniert. Nach meiner 
Meinung ist die Einstellung bei Auslieferung 110, also externer Quarz 3 
bis 8 MHz.
Bei mir funktioniert es in dieser Einstellung aber auch mit einem 16 MHz 
Quarz.

Aber kann durch ungünstige Einstellung dieser Bits wirklich ein so 
sonderbares  Verhalten erzeugt werden, wie es oben beschrieben wurde?

Und wo kann man diese speziellen Quarze für den  stromsparenden 
(Vittoz-)Oszillator beziehen?

Gruß

Stefan Salewski

von Stefan W. (wswbln)


Lesenswert?

Stefan Salewski wrote:
> Und wo kann man diese speziellen Quarze für den  stromsparenden
> (Vittoz-)Oszillator beziehen?

...das konnte mir auf Anfrage nicht einmal ATMEL sagen (bzw. die Spec 
eines dafür tauglichen Quarzes geben).  :-(((

>Aber kann durch ungünstige Einstellung dieser Bits wirklich ein so
>sonderbares  Verhalten erzeugt werden, wie es oben beschrieben wurde?
...vielleicht. Zumindest beim Mega16 hatte ich mit der (nicht richtig 
gesetzten) CKOPT-Fuse schon mal mächtig Spass (NICHT!) Gott sei Dank 
trat der Fehler damals noch vor der Auslieferung der ersten Seriengeräte 
auf. "Im Feld" hätte man da wahrscheinlich lange gesucht.

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.