PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MiniControl - Erste Schritte



Kolba
13.02.2012, 13:13
Hallo Leute,

nachdem ich endlos lange nur Probleme mit dem Programmer hatte, wollte ich nun das erste Mal eine Schaltung zusammenbauen um zu gucken, ob das Board funktioniert und wie ich überhaupt den AVR flashe.

Meine Zielschaltung habe ich mal angehängt. Ist das so in Ordnung?

Würde folgender Quellcode gehen?

#define MCU atmega168
#define F_CPU 1000000UL

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
DDRC = _BV(0);
PORTC = 254;

while (1)
{
PORTC &= 255-_BV(0);
_delay_ms(250);
PORTC |= _BV(0);
_delay_ms(250);
}
}

Ich hoffe mal, ja.
Das Erstellen war erfolgreich.
========== Build: 1 erfolgreich oder aktuell, Fehler bei 0, 0 übersprungen ==========

Wie bringe ich den nun das Programm aufm AVR? Ich Benutze den AVR STUDIO 5 (nein, ich will nicht wechseln) mit dem AVRisp mkII.
Jemand schonmal damit gearbeitet?

Wäre supercool, wenn mir einer helfen könnte.

//EDIT: Hoppla, die LED kommt ja anders herum und wird zwischen GND und Port gesetzt, oder? (habs in der Zeichnung zwischen VCC und Port)

mfg Kolba.

Kolba
13.02.2012, 17:30
Kann mir da niemand weiterhelfen?
Bestimmt hat doch hier schonmal jemand mit dem RN-Board gearbeitet oder kennt sich etwas mit der C-Programmierung aus? :/

Torrentula
13.02.2012, 18:37
So wie du es beschreibst ist die LED dann richtig angeschlossen, man nennt die LED dann "high-active", da der Zustand des Portpins auf 1 (High) geändert werden muss, um die LED einzuschalten.

Die bits würde ich persönlich anders setzen, also nicht _BV(0) verwenden, aber das ist eigentlich egal, da beide Ausdrücke gleichwertig sind.

Dem Ausgangsregister den Wert 254 zu geben ist allerdings falsch! Du setzt damit alle Pins auf Output außer PC0, der wird als Input definiert. Binär ist 254 = 11111110, du hingegen suchst nach 1 = 00000001.

So würde ich persönlich das machen:



#define MCU atmega168

#ifndef F_CPU
#define F_CPU 1000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{

DDRC = (1<<PC0); // PC0 auf Ausgang ohne andere Pins zu beeinflussen
PORTC &= ~(1<<PC0); // sicherstellen, dass PC0 auf LOW liegt

while (1)
{
PORTC |= (1<<PC0); // PC0 liegt ja bereits auf LOW, deswegen jetzt auf HIGH
_delay_ms(250);
PORTC &= ~(1<<PC0);
_delay_ms(250);
}
}


MfG

Torrentula

Kolba
13.02.2012, 19:59
yippie! Es klappt. Wie arbeite ich mich nun weiter in die Materie ein? :/
Wie gehts weiter? ^^

Hubert.G
13.02.2012, 20:25
Schau dir das mal an: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial