Hey Leute,
ich brauche eure Hilfe.
Nach einer längeren Pause habe ich mich wieder an ein neues
Mikrocontrollerprojekt gewagt. Jetzt wollte ich mit den Basics anfangen,
doch leider bekomme ich es scheinbar nicht mal gebacken eine einfache
LED im Sekundentakt blinken zu lassen.
Mir ist leider mein Oszilloskop beim Umzug kaputt gegangen, sonst könnte
ich den genauen Takt bestimmen. Ich habe aber über mein Handy eine
Stoppuhr laufen lassen und konnte schon nach etwa sechs-mal-LED-blinken
feststellen, dass die LED definitiv nicht annähernd im Sekundentakt
blinkt. (Daher schließe ich aus, dass es an der Ungenauigkeit des
internen Quarzes liegt)
Normalerweise sollte der interne Quarz von Werk aus mit 1Mhz takten
(8Mhz mit CKDIV8 FuseBit gesetzt --> 1Mhz) oder? Leider blinkt die LED
nicht annähernd im Sekundentakt. Auch nach anschließen eines externen
Quarzes (8Mhz mit 2x22pF zu GND; CKDIV8 FuseBit gesetzt --> 1Mhz;
SUT_CKSEL FuseBit auf Extern gestellt) blinkt die LED nicht annähernd im
Sekundentakt. Das heißt ich kann den Fehler beim Quarz ausschließen. Nur
wo liegt dann der Fehler? Habe auch anstatt der delays versucht das
Problem mit Timern zu lösen - leider auch erfolglos. Habe auch schon
einen anderen Controller vom selben Typ (Attiny2313A-PU) auf das Board
gesteckt - auch ohne Erfolg. Nachstehend noch ein paar Infos. Ich hoffe
ihr könnt mir helfen. Danke schon mal!
Controller: Attiny2313A-PU
Programmer: AVR Dragon in SPI mode
Nutze noch AVR-Studio 4
PINBELEGUNG: siehe Datenblatt (http://www.atmel.com/images/doc2543.pdf)
PIN01: RESET zu AVR Dragon
PIN10: GND
PIN12 (PINB0): LED mit Widerstand zu GND
PIN17: MOSI
PIN18: MISO
PIN19: SCK
PIN20: VCC mit 100nF zu GND
MEIN CODE:
1 | #include <avr/io.h>
|
2 | #define F_CPU 1000000UL
|
3 | #include <util/delay.h>
|
4 | int main(void)
|
5 | {
|
6 | DDRB |= 1<<PINB0;
|
7 | while(1)
|
8 | {
|
9 | PORTB |= 1<<PINB0;
|
10 | _delay_ms(1000);
|
11 | PORTB &= ~(1<<PINB0);
|
12 | _delay_ms(1000);
|
13 | }
|
14 | }
|