Forum: Mikrocontroller und Digitale Elektronik Eclipse Programm (Mikroprozessor)


von Christian M. (christian87)


Lesenswert?

Hallo Leute,

ich hätte da mal ne Frage an euch und zwar sollten wir ein paar 
Funktionen(die vorgegeben waren) in Eclipse schreiben und dann die 
einzelnen Schritte kommentieren und auf die einzelnen Begriffe eingehen 
(was es macht wofür es gut geht).
Ich hab das so gut wie möglich versucht,fände es toll wenn ihr mir die 
inzelnen Schritte nochmal erklären könntet.


Danke im Vorraus.


CODE:

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

void initPort_AinBout();
void putByteLED_B(unsigned char);
unsigned char waitforKey_A();
unsigned char getKeyNum(unsigned char);
void putPattern(unsigned char[], int, double);

void initPort_AInBOut()
{
DDRA=0x00; // PortA wird als Eingang festgelegt
DDRB=0xFF; // PortB wird als Ausgang festgelegt
PORTA=0xFF; // Pull-Up Widerstände von PortA aktivieren
PORTB=0xFF; // LEDs ausschalten
}

void putByteLED_B(unsigned char byte)
{
PORTB=~byte; // Bytefolge invertiert auf PORTB ausgeben (Nur die 0-Werte 
leuchten)
}

unsigned char waitforKey_A()
{
unsigned char input=0;
//while(PINA==0xFF) // Endlosschleife solange keine Taste gedrückt wird
//{
//}
input=~PINA; // Gedrückte Taste(n) invertiert einlesen
//while(PINA!=0xFF) // Endlossschleife solange eine Taste gedrückt wird
//{
//}
//_delay_ms(200); // Verzögerung von 200ms um Tastenprellen zu vermeiden
return input;
}

unsigned char getKeyNum(unsigned char sw)
{
switch(sw)
{
case 0x01:sw=0;break; //1 LED
case 0x02:sw=1;break; //2 LED
case 0x04:sw=2;break; //3 LED
case 0x08:sw=3;break; //4 LED
case 0x10:sw=4;break; //5 LED
case 0x20:sw=5;break; //6 LED
case 0x40:sw=6;break; //7 LED
case 0x80:sw=7;break; //8 LED
default:sw=255;break; //0 LED

}
return sw;
}
void putPattern(unsigned char pattern[], int length, double delay)
{
int i=0;
for (i=0; i<length; i++)
{
putByteLED_B(pattern[i]); // i-te Bytefolge ausgeben
_delay_ms(delay); // Verzögerung um 'delay' ms, damit Wechsel sichtbar
}
PORTB=0xff; // Alle LEDs an PORTB wieder ausschalten
}

int main(void)
{
unsigned char byte=170, key_A=0, keyNum=0;

initPort_AInBOut();
putByteLED_B(byte);
_delay_ms(500);
key_A=waitforKey_A();
//PORTB=key_A;
keyNum=getKeyNum(~key_A);
//PORTB=keyNum;

//Aufgabe 2
unsigned char pattern[8]={255,0,255,0,255,0,255,0};
int length=8;
double delay=500;
putPattern(pattern,length,delay);

while(1) //Endlosschleife
{
}
}

von Christian M. (christian87)


Lesenswert?

Was genau sind die Eigenshaften vom DDR Register und was genau macht das 
InitPort?

von datenrichtung (Gast)


Lesenswert?

Ich hab ehrlich gesagt keine Lust dir das zu erklären (und damit fremde 
Hausaufgaben zu machen). Ich zeig dir aber wo du das nachlesen kannst.
Ich nehme mal an es geht um Atmel 8-Bit AVR.

Die Originalquellen sind:
-die Dokumentation zur avr-libc:
http://www.nongnu.org/avr-libc/user-manual/index.html
-das Datenblatt zum Controller:
das gibts immer beim Hersteller: http://www.atmel.com
wenn du den Typ noch nich weißt nimm einfach al das datenblatt des mega 
48/88/168:
http://www.atmel.com/dyn/resources/prod_documents/2545S.pdf

Wenn dir Deutsch mehr liegt gibt es im Internet noch gefühlte tausend 
Tutorials zum Thema, einfach mal googeln.

Hier auf der Seite gibts auch zwei gute Tutorials von denen man eines 
mal durchgelesen haben sollte:

Für Assembler:
http://www.mikrocontroller.net/articles/AVR-Tutorial
Für C (einfache Grundkenntnisse in C werden vorausgesetzt):
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Wenn es noch Fragen jenseits vom Tutorial gibt bin ich auch bereit sie 
zu beantworten.

von Christian M. (christian87)


Lesenswert?

Hallo Danke erstmal für die schnelle Antwort,ich werd mir das mal 
durchlesen.
Aber kannst du mir vll die 3 Fragen kurz beantworten?

Was genau sind die Eigenshaften vom DDR Register und was genau macht das
InitPort und der PINA Register?


Danke im Vorraus.

von datenrichtung (Gast)


Lesenswert?

Zu deiner Frage passt besonders dieser Abschnitt im AVR-GCC Tutorial:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.