Wiso funktioniert meine Software für den ATmega88 nicht ??
Hallo zusammen
Ich bin neu auf diesem Gebiet aber habe schon einmal versucht für meinen kleinen Roboter die Software mit der C Sprache zu programmieren. Aber der Roboter hat nicht so auf meine Software reagiert wie ich es gerne hätte.
Jetzt frage ich mich wo mein Fehler ist.
Ich habe hier einen Link für Euch mit meinem Programmierungsversuch,
kann mir bitte Jemand sagen was hier nicht stimmt ?
http://dennis4123.de.funpic.de/Robo_Schalter.zip
Ich programmiere meinen Roboter mit dem AVR Dude und kompilliere die .c Datei mit AVR Studio 4 zu einer .hex Datei und lade sie auf den Roboter.
Danke
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo
Das sieht ja eigentlich gut aus, ich erhalte beim Kompilieren allerdings Warnungen weil das void als Parameter in den Definitionen fehlt:
void driveForward(void){
Aber das kann's eigentlich nicht sein. Hauptfehler beim Verwenden des AVR-Studios ist das Vergessen des Speicherns vor dem Kompilieren. Deshalb im Anhang die von mir erzeugte Hex-Datei.
Funktioniert das:
Code:
#define __AVR_ATmega88__
#include <avr/io.h>
//#include <iom88.h>
#define STATSLED0_ON (PORTC |= 1<<PC0)
#define STATSLED0_OFF (PORTC &= ~(1<<PC0))
#define STATSLED1_ON (PORTC |= 1<<PC1)
#define STATSLED1_OFF (PORTC &= ~(1<<PC1))
#define STATSLED2_ON (PORTC |= 1<<PC2)
#define STATSLED2_OFF (PORTC &= ~(1<<PC2))
#define STATSLED3_ON (PORTC |= 1<<PC3)
#define STATSLED3_OFF (PORTC &= ~(1<<PC3))
#define SWITCH_LEFT (PINC & 1<<PC4)
#define SWITCH_RIGHT (PINB & 1<<PB4)
#define SWITCH_BACK_LEFT (PINC & 1<<PC6)
#define SWITCH_BACK_RIGHT (PINB & 1<<PB0)
int main(void){
//DDRD = 1<<PD6 | 1<<PD7; // PD6 PD7 Output Motor1;
//DDRB = 1<<PB1 | 1<<PB2; // PB1 PB2 Output Motor2;
DDRC &= ~(1<<PC4 | 1<<PC6); // PC4 PC6 Input SWITCH_LEFT & SWITCH_BACK_LEFT;
DDRB &= ~(1<<PB4 | 1<<PB0); // PB4 PB0 Input SWITCH_RIGHT & SWITCH_BACK_RIGHT;
DDRC = 1<<PC0 | 1<<PC1; // PC0 PC1 Output StatusLED0 & 1;
DDRC |= 1<<PC2 | 1<<PC3; // PC2 PC3 Output StatusLED2 & 3;
while(1)
{
if(SWITCH_LEFT) STATSLED0_ON; else STATSLED0_OFF;
if(SWITCH_BACK_LEFT) STATSLED1_ON; else STATSLED1_OFF;
if(SWITCH_RIGHT) STATSLED2_ON; else STATSLED2_OFF;
if(SWITCH_BACK_RIGHT) STATSLED3_ON; else STATSLED3_OFF;
}
return(0);
}
(Nicht getestet weil mir der passende Roboter fehlt)
Ich hoffe, es ist so richtig. Die Hex-Datei dazu ist auch im Anhang. Übrigens: Willkommen im RN-Forum.
Gruß
mic