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? :/
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?
Ich hoffe mal, ja.Code:#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); } }
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.
Geändert von Kolba (13.02.2012 um 14:19 Uhr)
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? :/
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:
MfGCode:#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); } }
Torrentula
MfG Torrentula
yippie! Es klappt. Wie arbeite ich mich nun weiter in die Materie ein? :/
Wie gehts weiter? ^^
Schau dir das mal an: http://www.mikrocontroller.net/artic...R-GCC-Tutorial
Lesezeichen