Als Projekt habe ich mir ein Lauflicht mit 8 Leds ausgedacht.
Es sollten erstmal nur Leds angeschlossen werden, also keine Eingänge bzw Taster.
D.h. wenn am Mikrocontroller Spannung anliegt, sollte der ofort mit dem Programm beginnen.
Das Problem ist das ich statt einem Lauflicht einen binären Zähler programmiert habe.
Zur Schaltung:
Betriebsspannung 4.5V
Mikrocontroller AtMega32
Leds Rot diffus ca 2V
Widerstände 150 Ohm
An Vcc kommt die Spannung
An Gnd kommt 0 Volt
An PD0 bis PD7 kommen die einzelnen LEDs mit Vorwiderstand
Auf meinem Steckboard sieht das so aus:
Zum Programmcode:
Das Programm habe ich in C geschrieben, weil ich die Sprache schon kann.
Also in einem Editor den C-Quelltext geschrieben.
Ein Makefile erstellt, welche an den Atmega32 angepasst ist.
Dann mit WinAVR den Quellcode zu einem Hex-File compiliert.
Die HEX Datei mit Ponyprog mittels Polliboard auf den ATMega geflasht.
Der Quelltext:
Code: Alles auswählen
#include <avr>
#include <stdint>
#define F_CPU 1000000UL
#include <util>
int main(void)
{
uint8_t i=0;
DDRD = 0xff;
PORTD = 0x00;
while (1)
{
PORTD = i;
i++;
_delay_ms(1000);
}
return 0;
}Das Problem liegt in der while Schleife
PORTD sind die Ausgangsports PD0 bis PD7
PORTD wird mit der Variablen i gleichgesetzt
i++ bedeutet das die Variable um 1 erhöht wird
i++ ist ein 8Bit Integer
Aber PORTD wird entweder mit hexwert oder binär definert.
PORTD = 0xFF hexwert
PORTD = 0b11111111 binär
Also wie schaffe ich es das immer nur ein Ausgangspin weiter geschaltet wird?
Ich geh erstmal essen und danach lade ich ein Video vom Binär-Zähler hoch.
mfg Martin


