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
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)
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...
Kenntnisse der Elektrotechnik???? Wer alles so mit Strom hantiert!
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
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
Währe ein Projekt mit 4,5V Flachbatterie, einem Schalter und einem Lämpchen nicht besser????? Nur so zur Übung????
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.
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.
> 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.
verdammt. also cutte ich AREF von VCC. Sollte ich den Pin einfach freihängen lassen oder lieber wie du mittels Kondi auf Masse legen?
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.
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 );
@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?
An Watchdog und Brownout hatte ich auch schon gedacht -- in der Tat, man kann beide per Fuses einschalten. Also beides kontrollieren.
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.
>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.
WDTCR kennt er nicht. muss da noch eine spezielle ".inc" eingebunden werden?
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.
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.
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?
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.
>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) ...
>watchdog ist aus. brownout auf 2,6 V...
Brownout würde ich ganz abstellen,
siehe Datenblatt Seite 62:
BODLEVEL 2..0 Fuses 111
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)?
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.
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.