Hallo,
das meiste sollte so passen, allerdings stimmt bei den PORT- und PIN-Registern manches nicht.
Das ist so gedacht:
Das DDRx-Register legt fest, ob ein Anschluss Eingang(0) oder Ausgang(1) sein soll.
Ist der Anschluss als Ausgang eingestellt, kannst du den mit dem PORTx-Register auf High oder Low setzen.
Ist der Anschluss als Eingang eingestellt, kannst du mit dem PORTx-Register die Pullup-Widerstände aktivieren/deaktivieren.
Willst du einen Eingang abfragen, musst du das PINx-Register auslesen.
So müsste das meiner Meinung nach aussehen:
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();
unsigned char string[12] = "Hello World!"; //Text string
PORTF = (1<<PF2); //Setzt Strobe auf high
while(PINK == 255); //Wartet auf einen Tastendruck
for (unsigned char 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(PINF == 1); //Wartet auf die Bestätigung des Druckers, dass Daten empfangen wurden
}
return 0;
}
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<<PF7); //Schaltet Autofeed ein
}
void strobe(void)
{
PORTF = ~(1<<PF2); //Setzt Stobe auf low = Drucker soll empfangen
_delay_ms(1);
PORTF = (1<<PF2); //Setzt Strobe wieder auf high
}
//----------------------------------------------------------------------
Vermutlich wird man noch die while-Schleifen anpassen müssen, in der verlinkten Seite wird bei der zweiten while-Schleife das ACK abgefragt, ist bei dir an PF4 ?
Grüße, Bernhard
Lesezeichen