AT90USB162 kann keine Fuse Bits schreiben

Gast #2205775
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);
}

  ;;

}
Persönliche Seite #2205780
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.
Persönliche Seite #2205792
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.
Gast #2205800
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.
#2205804
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.
Gast #2205810
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
}
  ;;

}
#2205833
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

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