www.mikrocontroller.net

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


Autor: Alexander T. (alext)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Ohmmeter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kenntnisse der Elektrotechnik????
Wer alles so mit Strom hantiert!

Autor: Alexander T. (alext)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Prof. Y (Gast)
Datum:

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

Nur so zur Übung????

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muss es statt

int main()

nicht

int main(void)

heißen?

Autor: Alexander T. (alext)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Prof. Y (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C Kenntnisse mal überdenken???

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alexander T. (alext)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier mal die schaltung...

Autor: Stefan Salewski (Gast)
Datum:

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

Autor: Alexander T. (alext)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.




Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit Kondensator kannst du nix auf Masse legen

Autor: Sardaukar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 );

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Alexander T. (alext)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
watchdog ist laut fuses aus...

Autor: Stefan Salewski (Gast)
Datum:

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

Autor: Sardaukar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alexander T. (alext)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
watchdog ist aus. brownout auf 2,6 V...

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alexander T. (alext)
Datum:

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

Autor: Sardaukar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sardaukar (Gast)
Datum:

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

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.


Autor: Alexander T. (alext)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Sardaukar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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) ...

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>watchdog ist aus. brownout auf 2,6 V...

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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)?

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Wimmer (wswbln)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Wimmer (wswbln)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.