Tiny 2313, tipps und kontrolle gesucht
hi
ich bin ziemlich neu in der microcontroller programmierung...
habe vorher aber schon mit c++ gearbeitet
so, ich versuche einen atmel tiny 2313 zu programmieren und habe auch einen code geschrieben, der sich fehlerfrei compilieren lässt
allerdings denke ich, dass der nicht so läuft wie er soll und wollte das ein erfahrener User nochmal drüberschaut, ob die befehle stimmen und er macht was er soll, damit ich den nicht umsonst einlöte(habe es immer daneben geschrieben)
Ausserdem hoffe ich vielleicht ein paar verbesserungsvörschläge und tipps zu bekommen
Danke
Code:
#include <avr/io.h>
int main () {
DDRB = 0x00; // B Eingänge
PINB = 0x00; //jeden Eingang benutzen
DDRD = 0xFF; // D Ausgänge
PORTD = 0x11; //Standard: D0,D4 gesetzt
DDRD = 0xFF; // A Ausgänge
PORTD = 0x00;
while(1)
{
if ((!PINB1 & (1<<PINB1)) || ( !PINB2 & (1<<PINB2)) ) // Wenn B1 oder B2 == 0 dann
{
PORTD = 0x00; // Alle B Ports auf 0
}
if ( PINB4 & (1<<PINB4) ) // Wenn B1 == 1 dann
{
PORTD = 0x17; //D0,D1,D2,D4 gesetzt
}
if ( PINB3 & (1<<PINB3) ) // Wenn B1 == 1 dann
{
PORTD = 0x19; //D0,D1,D4 gesetzt
}
if ((!PINB0 & (1<<PINB0)) ) // Wenn B0 == 0 dann
{
PORTD = 0x11; //Standard: D0,D4 gesetzt
}
if((bit_is_set (PORTD,4))) //2LEDs abwechselnd blinken
//Wenn PortD4 gesetzt
{
PORTA &= ~(1 << 4); //PortD4 auf 0 setzen
PORTD |= (1 << 5); //PortD5 auf 1 setzen
}
else
{
PORTA &= ~(1 << 5); //PortD5 auf 0 setzen
PORTD |= (1 << 4); //PortD4 auf 1 setzen
}
}
return 0;
}
Re: Tiny 2313, tipps und kontrolle gesucht
Code:
#include <avr/io.h>
int main () {
DDRB = 0x00; // B Eingänge
PINB = 0x00; //jeden Eingang benutzen PIN ist ein ausgaberegister!!! nie was reinschreiben!
DDRD = 0xFF; // D Ausgänge sieht ok aus
PORTD = 0x11; //Standard: D0,D4 gesetzt das auch
DDRD = 0xFF; // A Ausgänge erm das register für port A ist DDRA
PORTD = 0x00; // dasselbe in grün nicht PORTD sondern PORTA
while(1)
{
if ((!PINB1 & (1<<PINB1)) || ( !PINB2 & (1<<PINB2)) ) // Wenn B1 oder B2 == 0 dann ...
// iwie falsch (!(PINB & (1<<PB1)) || !(PINB & (1<<PB2)))
{
PORTD = 0x00; // Alle B Ports auf 0 PORTB statt PORTD
}
if ( PINB4 & (1<<PINB4) ) // Wenn B1 == 1 dann ... siehe oben
{
PORTD = 0x17; //D0,D1,D2,D4 gesetzt
}
if ( PINB3 & (1<<PINB3) ) // Wenn B1 == 1 dann
{
PORTD = 0x19; //D0,D1,D4 gesetzt
}
if ((!PINB0 & (1<<PINB0)) ) // Wenn B0 == 0 dann
{
PORTD = 0x11; //Standard: D0,D4 gesetzt
}
if((bit_is_set (PORTD,4))) //2LEDs abwechselnd blinken
//Wenn PortD4 gesetzt
{
PORTA &= ~(1 << 4); //PortD4 auf 0 setzen PD4 statt nur 4
PORTD |= (1 << 5); //PortD5 auf 1 setzen
}
else
{
PORTA &= ~(1 << 5); //PortD5 auf 0 setzen PD5 statt nur 5
PORTD |= (1 << 4); //PortD4 auf 1 setzen
}
}
return 0;
}
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Ineedhelp,
wenn du erst angefangen hast Microcontroller zu programmieren empfehle ich dir nicht mit so vielen Bitschiebeoperationen zu arbeiten. Da kann man sich nämlich leicht mal vertippen. Stattdessen kann man diese Operationen auch durch Makros ersetzen.
Ich habe mir mal selber, weil ich nicht gerne mit diesen umständlichen Operationen arbeite, eine Haeder-Datei mit allen Makros, die die Bitoperationen ersetzen geschrieben.
Ich habe noch zusätzlich true, false und bool definiert, weil mein AVR-GCC Compiler diese Schlüsselwörter nicht kennt.
mfg _R2D2