AT90 schließt VCC und GND kurz

OP #517943
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
Gast #517954
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)
Gast #517961
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...
OP #518003
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
Gast #518074
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
#518102
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.
Gast #518105
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.
#518130
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.



Gast #518145
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 );
Gast #518152
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?
Gast #518164
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.
Gast #518197
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.
Gast #518215
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.
Gast #518228
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.

OP #518237
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?
Gast #518246
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.
Gast #518247
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) ...
Gast #518268
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)?
Gast #518358
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.
Gast #518413
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
#518422
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.
Gast #518436
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
#518458
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren