Verstehe Programmcode vom Prof nicht
Hallo,
ich bin neu auf dem Gebiet Mikrocontroller und deren Programmierung.
Jetzt habe ich Code von meinem Professor bekommen, welchen ich hinten und vorne nicht verstehe. Jetzt wollte ich diesen Code mittels AVR Studio begreifen aber ich scheitere schon daran, dass der Code nicht einmal im AVR Studio lauffähig ist. Ich bin mir sicher, dass noch Bibliotheken like #include <avr/io.h> und weitere Befehle fehlen.
Jetzt meine Frage, kann mir von Euch jemand behilflich sein diese Code (es sind drei Bsp.) lauffähig zu bekommen? Damit ich endlich mal die Befehle etc. verstehen kann.
Bsp. 1:
Code:
void main()
{
uint8_t step; //Schrittweite
uint16_t value;
uint16 count;
initPort();
value = 1;
while (1)
{
step = (PINA & 0x06) | ((PIND>>2)&0x01);
value <<= step;
value = (value & 0xFF) | (value >> 8);
PORTC = (uint8_t) value;
for (count = 0; count < 5000; count++)
asm volatile („nop“);
}
}
Bsp. 2:
Code:
volatile uint32_t sec;
void initTimer0()
{
sec = 0;
TCNT0 = 256-16;
TCCR0 = (1 << CS02) | (1 << CS00);
TIMSK = (1 << TOIE0);
sei();
}
volatile uint8_t tick = 0;
SIGNAL (SIG_OVERFLOW0)
{
TCNT0 = 256-16;
tick ++;
if (tick==16)
{
sec++;
tick = 0;
}
}
Bsp. 3:
Code:
void initKey()
{
PORTD &= ~(1 << PD2);
DDRD &= ~(1 << PD2);
MCUCR |= (1 << ISC00);
GICR |= (1 << INT0);
sei();
}
Über Hilfe bin ich sehr dankbar, da ich leider im Moment noch auf keinen grünen Zweig komme. :-(
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Ja ich hab mich heute noch einmal an die ganze Sache ran getraut. Ich hab mich jetzt mal entschlossen die Aufgabe meines Profs hier zu stellen, inklusive meines Lösungsansatzes.
Also die Aufgabe lautet wie folgt:
Zitat:
Eine Lichtpunkt soll die LEDs von LED1 bis LED8 durchlaufen. Dabei sollen die LEDs gedacht kreisförmig angeordnet sein. Nach LED8 leuchtet also LED1. Mit den Schaltern S1 bis S3 geben Sie die Schrittweite binär an. Programmieren Sie das Lauflicht als Endlosschleife. Der Prozessor soll zwischen zwei Zuständen bis 5000 zählen.
Mein Ansatz zur Lösung:
Code:
#include <avr/io.h>
void main()
{
uint8_t step; //Schrittweite
uint16_t value;
uint16_t count;
DDRA = 0x00;
PORTA = 0x00; //oder müsste das 0xFF sein?
DDRC = 0xFF;
PORTC = 0x00;
DDRD = 0x00;
PORTD = 0x00; //oder müsste das 0xFF sein?
value = 1;
while (1)
{
step = (PINA & 0x06) | ((PIND>>2)&0x01);
value <<= step;
value = (value & 0xFF) | (value >> 8);
PORTC = (uint8_t) value;
}
}
Um den Code besser zu verstehen hab ich hier noch ein Schaltbild, was auch die Schikane dabei verdeutlicht. Und zwar liegt ein Schalter auf einem anderen Port. Den Zähler der nach jedem Durchlauf der while-Schleife auf 5000 zählen soll, habe ich aus Simulationszwecken mal weg gelassen.
Meine zwei Fragen:
- - Sind die Ports richtig initialisiert?
- Wieso "läuft" mein Licht nicht?
Leider kann ich in meiner Simulation mittels AVR Studio kein Lauflicht erkennen. Was mache ich falsch?
Danke für Hilfe!
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Markus,
danke für dein Antwort. Okay ich hab jetzt PORTD = 0xFF; und PORTA = 0xFF; gesetzt.
Aber die Simulation kann ich irgendwie nicht ganz nachvollziehen. ^^ Ich glaub ich hab noch ein paar Schwierigkeiten mit dem AVR Studio. :-b
Ich müsste doch jetzt auf Port C im I/O View meine Ports "laufen" sehen oder etwa nicht? Bei mir tut sich da irgendwie gar nichts. Zum verdeutlichen hab ich mal einen Screenshot mit angehängt.
Wäre super wenn mir da noch jemand dabei behilflich sein könnte. 8-[