Und wieso benutzt Du jetzt eine port.h - und woher hast Du die? Hast Du nicht schon io.h drin? Und 8MHz???? naja, was denn nun...1MHz oder 8MHz?
Ich vermute dass das neue Programm garnicht auf dem µC angekommen ist vorher.
Und wieso benutzt Du jetzt eine port.h - und woher hast Du die? Hast Du nicht schon io.h drin? Und 8MHz???? naja, was denn nun...1MHz oder 8MHz?
Ich vermute dass das neue Programm garnicht auf dem µC angekommen ist vorher.
Geändert von HeXPloreR (09.10.2012 um 15:55 Uhr)
8MHz weil ich die Fuses wieder umgestellt hab.
port ist ne eigene die ich schon weiter oben gepostet hab.
und irgendwie hast mich das zeug trotzdem, nachdem das Programm größer wird bleibt es wieder einfach stehen.
Also zumindest hab ich nen neuen ansatz:
Wenn ich den MC auf 1MHz stelle läuft das Programm und wenn ich ihn auf 8MHz stelle läuft es nicht.(natürlich takt im code angepasst.
jetzt versteh ich nixhts mehr...mit 8MHz läuft es, dann mit 1MHz auch...und jetzt wieder mit 8MHz nicht mehr?
Welche Spannung nutzt Du,das wurde weiter oben schon mal gefragt? Kann es sein das er mit deiner Spannung nicht mit 8MHz läüft bzw sobald Du LED zuschaltets die knappe Spannung einbricht und der µC resetet wird bzw die Brown Out detection anspricht?
Habe diese Probleme nicht bei 5V.
Beide GND Pins angeschlossen?
Du weißt, das Du die Hex von Hubert jetzt nur an 1MHz verwenden kannst/solltest!?
Viele Grüße
Geändert von HeXPloreR (09.10.2012 um 17:38 Uhr)
Also mal ganz von vorne:
Ich nutze via die Stromversorgung des MyAVR MK2, das sind 5V, aus dem USB anschluss.
Ich takte den AVR über den internen Taktgenerator.
Ich habe folgendes Programm erstellt:
Das läuft mit 1MHz prima, nutze ich jedoch 8MHz geht die LED einmal an und bleibt an.Code:#include <avr/io.h> #include <util/delay.h> #include "port.h" int main() { DDRB=0xFF; while(1) { _delay_ms(100); toogle_pin(PORTB,PB0); } }
Es sind beide AGND-GND->MyAVR GND
AVCC->VCC-> MyavrVCC
PB0->LED rot->GND
PB1->LED grün->GND
Reset->R4,7k->VCC
zwischen GND und VCC hängt ein 100nf cap und die ISP pins sind direkt durchgeschlossen.
Ja mir ist klar das ich das von Hubert nur mit 1MHz nutzen kann, allerdings funktionierd das von Hubert auch mit 1MHz nicht.
Ich glaube ich weis das Problem, meine _delay_ms routine ignoriert irgendwie die Takt angabe.
Folgendes Szenario:
Wenn ich den AVR auf 1MHz stelle und im Quellcode F_CPU mit 1MHz definiere wartet er beigenau 1s.Code:for(uint8_t i=0;i<10;i++) _delay_ms(100);
Stelle ich nun den AVR auf 2MHz, schreibe in den Quellcode F_CPU mit 2MHz müsste er ja bei obigem Code wieder 1s warten, tut er aber nicht. er wartet eine halbe sekunde.
bei 4MHz dementsprechend 250ms, bei 8 MHz 125ms.
Daher dachte ich vorhin er würde hängen, da ich als zeitspanne nur 100ms hatte, er aber bei 8MHz nur 12.5ms gewartet hat konnte ich das An und aus schlicht nicht mehr erkennen.
Um diese Erkenntnis auszuprobieren hab ich promt an F_CPU rumgespielt.
Ich habe Werte zwischen 100kHz und 100GHz eingestellt, dabei war es vollkommen egal, die Led blinkt bei einem CPUTakt von 8MHz mit konstanten 8Hz vor sich hin, egal wie ich F_CPU definiere.
Hoffe das hat jetzt jemand verstanden.
Geändert von Thalhammer (09.10.2012 um 20:16 Uhr)
okay, ich nehme an Du hast zwischen LED die min 470Ohm Widerstände extern verbaut? Ich schlage vor Du entfernst mal die Verbindung bei AVCC - denke die benötigt man hier nicht - und schon garnicht einfach so angeschlossen - und das dadurch der fehler entsteht ist naheliegend.
Dann liesst du bitte einmal die Low-Fuses aus, um die Anzeige zu aktualisieren. Dann prüfst Du ob 1MHz (+64ms)
Und dann nimmst Du bitte nochmal die Hex von Hubert und brennst es in den Flash.
Geändert von HeXPloreR (09.10.2012 um 20:16 Uhr)
Lies mal oben, ich hab was ergänzt, ich denke der Fehler liegt bei der PC Software.
...und ich denke Du schreibst die Fuses einfach nicht in den µC...nur im Programm reicht eben einfach nicht, da kannst Du rein schreiben was du möchtest an Frequenzen, damit versaust Du Dir nur die Zeiten, dein µC läuft fleissig mit 1MHz - weil Du es nicht für nötig hälst den "manuell" auszulesen(zur Kontrolle) und dann "um zu stellen", und dann in den Fuse Speicher "einzuschreiben".
Geht sogar in Bascom...hab 100 zu 500 ms geändert damit man es besser sehen kannCode:$regfile = "m8adef.dat" $crystal = 8000000 $baud = 19200 $hwstack = 40 $swstack = 16 $framesize = 32 Led Alias Portb.0 'the anode of the LED connected to PortB.0, cathode with resistor (470 Ohm) to ground Config Pinb.0 = Output Do Waitms 500 Toggle Led Loop
Wenn ich meine Fuses über mySmartUSB mit myAVR öffne, dann steht dort JEDESMAL 1MHz is default, erst nach dem auslesen der Fuses zeigt es den richtigen Wert von 8MHz an.
Geändert von HeXPloreR (09.10.2012 um 20:53 Uhr)
Mit Verlaub, das ist Quatsch. AVCC wird entweder direkt oder über eine Filter-/Glättungsschaltung an VCC angeschlossen. Immer!
@Topic: Ich glaube immer noch, dass die Spannungsversorgung schuld ist. Evtl. ist der USB-Port am Limit?
Nachtrag: Sorry, was ist das für ein rumgemurkse? Entweder F_CPU im File ODER in der IDE. Weiß der Geier was der Compiler gerade tut und was nicht.
mfG
Markus
Tiny ASURO Library: Thread und sf.net Seite
Lesezeichen