Hallo zusammen, ich versuche gerade einen AVR ATMEGA32 mit einen 8MHz Quarzoszillator zum laufen zu bringen. Was geht: Wenn ich den anhängenden Quellcode (XTAL = 1000000) und den Standard-Fuses (Fuses.jpg --> Interner Oszi) laufen lasse, funktioniert alles tadellos. Was nicht geht: Sobald ich meinen Quarzoszillator ( http://www.reichelt.de/Oszillatoren/OSZI-8-000000/3/index.html?;ACTION=3;LA=2;ARTICLE=13723;GROUPID=3174;artnr=OSZI+8%2C000000;SID=11UM44G38AAAIAAAfKjlQb48908975a5e92dcd4091680ed08415d ) und die Fuses wie in "Fuses-Quarzoszi.jpg" einstelle, kann mein LCD nicht mehr init. werden (1. Zeile lauter schwarze Balken). In anderen Versuchen (UART - Danneger) wird ein Teil des Codes abgefertigt (Signal am Ausgang des UART (TX) kann gemessen werden). Aber das Timing passt hier vermutlich auch nicht. Am Ausgang für PD7 (Datenleitung, im 4 Bit Modus zum LCD) kann ein sehr sehr schwaches regelmäßiges Signal gemessen werden, was aber nicht wirklich was ist... Was ich schon probiert habe: Mit einem Oszilloskop hab ich den XTAL1 (PIN 13) gemessen. Hier ist die Schwingung deutlich zu messen (ca. 7,9 MHz). Andere ATMEGA32 habe ich auch bereits ohne Erfolg probiert. XTAL2 ist mit nichts verbunden. Wo ist mein Fehler? Fuses (Wäre jetzt peinlich ;-) ) Quelltext (Abgekupfert von Herrn Danneger :-) ) ? Danke euch allen schon im Voraus! Gruß Dominik
Dominik ... schrieb: > Aber das Timing passt hier vermutlich auch nicht. Was heißt 'vermutlich'? Es gibt eine ganz einfache Möglichkeit, wie du das auch ohne Oszi überprüfen kannst. Verkabel eine LED an einen Portpin und dann benutzt du _delay_ms um die LEd zum Blinken zu bringen
1 | #define F_CPU 8000000UL
|
2 | |
3 | #include <avr/io.h> |
4 | #include <util/delay.h> |
5 | |
6 | #define LED_DDR DDRB
|
7 | #define LED_PORT PORTB
|
8 | #define LED PB0
|
9 | |
10 | int main() |
11 | {
|
12 | LED_DDR |= ( 1 << LED ); |
13 | |
14 | while( 1 ) |
15 | {
|
16 | _delay_ms( 1000 ); |
17 | LED_PORT |= ( 1 << LED ); |
18 | _delay_ms( 1000 ); |
19 | LED_PORT &= ~( 1 << LED ); |
20 | }
|
21 | }
|
wenn die tatsächliche, physikalische Taktfrequenz mit dem bei F_CPU eingetragenen Wert übereistimmt, dann ist deine LED 1 Sekunde an, 1 Sekunde aus. Stimmt sie nicht überein, weil zb der µC immer noch auf 1Mhz läuft, dann blinkt die LED nicht mit 1 Sekunde, sondern mit 8 Sekunden. Das sieht man auch mit freiem Auge ohne Messinstrumente.
Guten Morgen Herr Buchegger, vielen Dank für die Antwort. Bin dadurch einen großen Schritt weitergekommen! Karl Heinz Buchegger schrieb: > Was heißt 'vermutlich'? Das heißt, ich bin Anfänger und wusste nicht weiter :-) > "LED Blink Routine" Diese sollte man in sein Standard-Baukasten mit aufnehmen!!!! Wenn ich diese Routine allein laufen lasse, so wie Sie mir den Quellecode zur Verfügung gestellt haben, schaltet die LED im Sekunden Takt(Mit dem Oszi gemessen). Juhuuu, die Fuses scheinen richtig :-) Füge ich diese Routine in meinen Quelltext ein blinkt die LED wesentlich schneller. Laut Oszi schaltet die LED ca. alle 100mS. Also ist der Fehler vermutlich (ja des vermutlich soll verdeutlichen, dass ich Anfänger bin ;-) ) im Quelltext....irgendwo in den Delay Funktionen. Wenn ich die Lösung habe, werde ich natürlich Bescheid geben. Bin natürlich auch dankbar, wenn jemand den Fehler auf Anhieb findet! Gruß Dominik
Ich melde mich nochmal, hab das Problem zumindest zum Teil gelöst. 1. Die LED hat alle 125ms geschalten (Man sollte beim analogen Oszi genauer hinschauen). 2. Anscheinend hat der in der delay.h nicht die 8MHz übernommen (F_CPU = 8000000). Hab diese jetzt kopiert, den Wert manuell geändert, zum Projekt dazu gelegt und eingebunden. Somit funktioniert es. Vielleicht hat jemand eine Idee, was ich falsch gemacht hab. Der Quelltext liegt noch im obigen Post. Zum Programmieren verwende ich den AVR Dragon über JTAG. Atmel Studio 6 (Version: 6.0.1938 - Service Pack 1) OS Version: Microsoft Windows NT 6.2.9200.0 Platform: Win32NT Installed Packages: ARMGCC - 3.3.1.115 ARM Toolchain Version: 4.7.0.49 - GCC 4.7.0 CMSIS Version: ${cmsisFileVersion} Package GUID: b55b919b-ef5f-4608-97eb-ddf473177814 Installed Packages: Atmel Software Framework - 3.1.3.114 ASF Version: 3.1.3 ASF Version: 3.0.1 ASF Version: 2.11.1 ASF Version: 2.10.0 ASF Version: 2.9.0 Installed Packages: Atmel Studio Extension Manager - 1.1 Atmel Studio Extension Manager Version: 1.1 Installed Packages: AVRAssembler - 2.1.51.46 AVR Assembler Version: 2.1.39.227 Installed Packages: AVRGCC - 3.4.0.65 AVR Toolchain 8 Bit Version: 3.4.0.663 - GCC 4.6.2 AVR Toolchain 32 Bit Version: 3.4.0.332 - GCC 4.4.3 Installed Packages: Visual Assist X for Atmel Studio - 10.7.1904.0 Visual Assist X for Atmel Studio Version: 10.7.1904.0
Dominik ... schrieb: > Anscheinend hat der in der delay.h nicht die 8MHz übernommen (F_CPU = > 8000000) F_CPU muss auch vor dem include von delay.h definiert werden. Dann brauchst Du delay.h nicht ändern. Gruß Dietrich
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.