Forum: Mikrocontroller und Digitale Elektronik AT90USB162 kann keine Fuse Bits schreiben


von Simon (Gast)


Lesenswert?

Hallo,


ich habe bisher etliche ATMegas mit meinem Adapter ueber ISP 
Programmiert.

Jedoch beim AT90usb162 kann ich die Fuse Bits nur lesen, jedoch nicht 
schreiben. Gibts da irgend ein Trick?

von Simon (Gast)


Lesenswert?

Was mich bisle Irritiert ist das die Lockbits gesetzt sind 0xEC ?

von spess53 (Gast)


Lesenswert?

Hi

>Was mich bisle Irritiert ist das die Lockbits gesetzt sind 0xEC ?

Ein Blick ins Datenblatt würde dir verraten, das das der Defaultwert 
ist.

MfG Spess

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

Simon schrieb:
> Was mich bisle Irritiert ist das die Lockbits gesetzt sind 0xEC ?

Die USB-Chips werden mit einem USB-Bootloader ausgeliefert und mit 
gesetzten Lockbits. Wenn du das Teil über ISP programmieren willst, 
musst du vorher einen Chip Erase machen.

von Simon (Gast)


Lesenswert?

aaaaah Danke

von Simon (Gast)


Lesenswert?

kann mir jemand spontan sagen wieso dieser code mit einem Mega8 funzt, 
jedoch mit dem AT90USB162 nicht mehr?

#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>


int main()
{

DDRD  |= (1<<PD4); // ausgang

 while(1)
 {
  PORTD &= ~(1<<PD4); //Low
  _delay_ms(200);
  PORTD |= (1<<PD4); // High
  _delay_ms(200);
}

  ;;

}

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

Simon schrieb:
> kann mir jemand spontan sagen wieso dieser code mit einem Mega8 funzt,
> jedoch mit dem AT90USB162 nicht mehr?

Vielleicht solltest du mal schreiben, was nicht funktioniert.

> #define F_CPU 8000000UL

Läuft der Controller auch damit? Quarz angeschlossen?

>   _delay_ms(200);

Der Übergabewert müsste (ohne dass ich es jetzt kontrolliert habe) zu 
hoch sein. Schaue mal in die delay.h, dort ist das genau beschrieben.

von Simon (Gast)


Lesenswert?

Ja der Quarz (8MHz) ist angeschlossen. wenn ich ihn abstecke, kann ich 
die fuses auch nicht mehr auslesen.

Ich dachte an ein Blinken der LED nur das tut sie nicht

von Oliver J. (skriptkiddy)


Lesenswert?

Nur mal so ins blaue geraten:

Wird vieleicht noch für den Atmega8 gebaut? Der Mega8 und dein USB-AVR 
sind nicht binärkompatibel. Du musst im Makefile bzw. in den 
Projectsettings den USB-AVR aufwählen, dass es funktioniert.


Gruß Skripttkidyy

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

Simon schrieb:
> Ich dachte an ein Blinken der LED nur das tut sie nicht

Sondern leuchtet dauerhaft (aber nicht mit voller Helligkeit)? Dein 
Timing stimmt nicht. Überprüfe, ob dein Controller wirklich mit 8MHz 
läuft (kein Prescaler aktiviert) und dann prüfe die _delay_ms() - der 
Übergabewert darf nicht zu groß sein. Lieber eine Schleife à la

unsigned char i;
for (i = 0; i < 20; i++) _delay_ms(10);

einfügen.

von Simon (Gast)


Lesenswert?

Ja der At90usb162 ist ausgewählt. Machen wirs anders.


Ich habe die delays raus genommen und nur noch folgendes drinne:

PORTD |= (1<<PD4); // High

dies geht jedoch denoch nicht.


Die LED, die auch funktioniert, geht nicht an.

Wenn ich den selben Draht von PD4 abziehe und auf VCC stecke leuchtet 
sie.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Christoph Budelmann schrieb:
> dann prüfe die _delay_ms() - der
> Übergabewert darf nicht zu groß sein.

Nein, ist schon lange nicht mehr.  Diese Funktion fällt auf deine
Schleifenvariante zurück, wenn der Parameter zu groß wird.

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

Jörg Wunsch schrieb:
> Christoph Budelmann schrieb:
>> dann prüfe die _delay_ms() - der
>> Übergabewert darf nicht zu groß sein.
>
> Nein, ist schon lange nicht mehr.  Diese Funktion fällt auf deine
> Schleifenvariante zurück, wenn der Parameter zu groß wird.

Danke für den Hinweis, dann muss ich das mal aus meinem Kopf streichen.

von Oliver J. (skriptkiddy)


Lesenswert?

Auzszug aus der delay.h vom WinAVR-20100110:
1
   The maximal possible delay is 262.14 ms / F_CPU in MHz.
2
3
   When the user request delay which exceed the maximum possible one,
4
   _delay_ms() provides a decreased resolution functionality. In this
5
   mode _delay_ms() will work with a resolution of 1/10 ms, providing
6
   delays up to 6.5535 seconds (independent from CPU frequency).  The
7
   user will not be informed about decreased resolution.

von Simon B. (nomis)


Lesenswert?

Simon schrieb:
> Ja der At90usb162 ist ausgewählt. Machen wirs anders.

Bitte hilf uns dabei, Dir zu helfen:

* poste die komplette Schaltung
* poste das komplette Programm.

Vielen Dank,
        Simon

von Simon (Gast)


Lesenswert?

Puh, Schaltung, mmh.
Ich habe das auf einem Steckbrett aufgebaut.
Es ist nur ein Quarz incl den Kondensatoren sowie eine SPI Schnittstelle 
angeschlossen.

Die Spannung 5V bekomme ich von USB, diese geht auf den Internen 
Spannungsregler. von UCAP greife ich die 3,3V fuer VCC ab.
AVCC (intern 2,5V) ist extern mit 1uF zu GND beschalten.

Dann gibts nur noch die LED, Anode mit Widerstand an PD4 und Kathode an 
GND.

Also Ansich eine total primitive Schaltung die genau so mit einem 
AtMega8 / 88PA wunderbar funzen würde.

Ich kanns mir echt nicht erkären wieso das so nicht funzen soll.
Nur bevor nichtmal eine LED funzt, brauche ich mit USB garnicht weiter 
machen.

Code:

#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>

int main()
{

  DDRD  |= (1<<PD4); // ausgang

 while(1)
 {
  PORTD |= (1<<PD4); // High
}
  ;;

}

von Simon (Gast)


Lesenswert?

OK, funzt jetzt. Aber ich versteh es nicht.

Fuse BODLEVEL war auf 2,7V eingestellt, diese Unterschreite ich auch 
nicht.
Denoch funktioniert der code nur bei BOD aus.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Simon schrieb:
> Denoch funktioniert der code nur bei BOD aus.

Vcc zu schlecht abgeblockt.

von Simon B. (nomis)


Lesenswert?

Simon schrieb:
> OK, funzt jetzt. Aber ich versteh es nicht.
>
> Fuse BODLEVEL war auf 2,7V eingestellt, diese Unterschreite ich auch
> nicht.
> Denoch funktioniert der code nur bei BOD aus.

Hast Du genügend Kondensatoren um den internen Regler, so wie im 
Datenblatt vorgesehen? Also 1µF an UCAP sowie mindestens mal einen 
Abblockkondensator an dem VCC pin?

Viele Grüße,
        Simon

von Simon (Gast)


Lesenswert?

Arrrrg, das ist ärgerlich, das ganze trara wegen 1x 100nF?

von Simon B. (nomis)


Lesenswert?

Simon schrieb:
> AVCC (intern 2,5V) ist extern mit 1uF zu GND beschalten.

Ähm, ähm, ähm.

Wieso liegt das nicht auf VCC? Der Pin ist nicht AREF.

Viele Grüße,
        Simon

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.