Hallo Leute,
ich bin ja schon länger im Bereich AVR Programmierung unterwegs. Allerdings bisher in Basic. Jetzt wollte ich ein neues Projekt anfangen (bzw. ein altes wieder aufnehmen), nur dass ich es diesmal in C verwirklichen will. Ich will einen Drucker ansteuern, per Parallel-Port versteht sich, und habe dazu das hier gefunden. Ich hab allerdings ein anderes Board und daher auch eine andere Pinbelegung. Ich als Basicer bin erschlagen von der Komplexität der Sprache C was Port- und Pinzuweisungen angeht, Basic ist eben doch sehr einfach gestaltet. Nun hab ich mich daran gemacht den Quellcode von obigem Link an meine Umgebung anzupassen, und wollte nun von euch wissen, ob ich alles (oder wenigstens etwas...) richtig gemacht hab, bevor ich mir meinen Drucker damit zerschieße.
Hier mein Code:
Verwendet wird ein ATMega 2560 und das myAVR Workpad. Achja, ich wollte den Code vom ersten Beispiel im Link übersetzen, sollte ich vlt. dazusagen.Code://---------------------------------------------------------------------- #define F_CPU 16000000 // Taktfrequenz des myAVR-Boards #include <avr\io.h> // AVR Register und Konstantendefinitionen #include <util/delay.h> //---------------------------------------------------------------------- void init_io(void); void strobe(void); int main(void) { init_io(); unsignedchar string[12] = "Hello World!"; //Text string PINF = (1<<PINF2); //Setzt Strobe auf high while(PINK == 255); //Wartet auf einen Tastendruck for (unsignedchar i = 0; i <= 12; i++) //Liest alle Stellen des String { PORTA = string[i]; //Legt die Zeichen an den Datenausgang strobe(); //Sagt dem Drucker, dass Daten anliegen while(PORTB == 1); //Wartet auf die Bestätigung des Druckers, dass Daten empfangen wurden } } void init_io(void) { DDRE = 0b11111111; //Datenleitungen DATA0-7 DDRF = 0b10100111; //Steuerleitungen vom/zum Drucker //PF0: nc Out //PF1: nc Out //PF2: Strobe Out //PF3: Busy In //PF4: ACK In //PF5: INIT Out //PF6: ERROR In //PF7: Autofeed Out DDRK = 0b00000000; //An alle Pins sind Taster angeschlossen PORTK = 0; //Pull-Up nicht setzen PORTF |= (1<<PinF7); //Schaltet Autofeed ein } void strobe(void) { PINF = ~(1<<PINF2); //Setzt Stobe auf low = Drucker soll empfangen _delay_ms(1); PINF = (1<<PINF2); //Setzt Strobe wieder auf high } //----------------------------------------------------------------------
MfG
Matthias








Zitieren

Lesezeichen