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?
Was mich bisle Irritiert ist das die Lockbits gesetzt sind 0xEC ?
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
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.
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); } ;; }
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.
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
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
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.
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.
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.
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.
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. |
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
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 } ;; }
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.
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
Arrrrg, das ist ärgerlich, das ganze trara wegen 1x 100nF?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.