Hello, Also wie schon erwähnt, möchte ich über meinen Palm, der ja nur eine RS232 Schnittstelle besitzt, drucken können. Folglich brauche in einen seriell2parallel Konverter. Gestern am Abend sind mir da einige sehr gute Ideen durch den Kopf gegangen mit denen es eigentlich funktionieren sollte, doch weiss ich nicht, ob das nicht alles zu primitiv ist.... Vorgestellt hab ich mir das so: Ich nehme einen x-beliebigen AVR mit UART, z.b. AT90S2333. Dort schliesse ich die serielle Schnittstelle mittels MAX232 an den Palm und einen 8Bit Port, z.B. PORTD direkt parallel. Jetzt könnte ich ja theoretisch ein ganz einfaches Programm verwenden: int main(void) { // UART aktivieren sbi(UCSRB, RXEN); // Empfangen aktivieren sbi(UCSRB, RXCIE);// Erweitertes Empfangen aktivieren // Baudrate asm volatile("ldi r16,4000000/(9600*16)-1" "\n\t" "out 0x09,r16"); outp(0xff, DDRC); // PORTC als Ausgang while(1); // Auf Interrupts warten } // wenn ein Zeichen übers UART kommt, nach PORTC ausgeben. SIGNAL(SIG_UART_RECV) { outp(inp(UDR), PORTC); } Diese Lösung kommt mir doch etwas sehr einfach vor. Der Konverter sollte einfach nur normale PBM Drucker unterstützen, benötigt dieses Protokoll auch Kontrollleitungen des parallelen Ports? Jetzt ist mir grad was aufgefallen: Es ist eh verdammt klar, dass RxD und TxT IM PORTC liegen, der der einzige 8Bit I/O Port ist. Kann ich das ganze EINFACH aufteilen? Nachdem man das sicher nicht so einfach hinbringen wird, kann ich ja für die ersten 6 Bit PORTB und für die restlichen 2 PORTD verwenden. Dann müsste ich doch einfach nur das empfangende Zeichen nach PORTB schreiben und dann fehlen noch 2Bit. Dann einen Shift und die restlichen nach PORTD. (Müssen dann halt beim Drucker dementsprechend verbunden werden). Stimmt das so? Achja, noch was: Für die direkte Anbindung der Druckerschnittstelle an den AVR: Da wären Standardwiderstände à la 10kOhm nicht schlecht bei jeder der acht Leitungen zwischen zu schalten, oder liege ich da falsch? Was hält ihr von meiner Idee? Ließe sich das durchführen? Oder hab ich was vergessen? Mir kommt das ganze nur irgendwie sehr einfach vor. Also Danke noch einmal für eure Hilfe Niki
Hi, wenn ich mich recht entsinne, reichen dem Drucker die 8 Datenbits nicht. STROBE (Pin1) muß nach dem Anlegen neuer Daten gepulst werden. Außerdem solltest Du sicherstellen, dass Du den Drucker nicht 'überfährst'. Da gibt es ein ACK vom Drucker. Von den Fehlermeldungen des Drucker mal abgesehen (z.B. PaperOut, Offline,...). Man will ja wissen, ob der Drucker wirklich druckt... Im Internet findet man bestimmt ein Protokoll. Holger B. hat einen Drucker an einen 80535 angeschlossen, vielleicht kann der ja näheres sagen?! --> HOLGER, sag was ;-) Bis dann, Ingo.
Hallo! Ersteinmal danke für deine Hilfe! Genau in dem Moment wollte ich hier schreiben dass meine Idee nicht genügt! Also offenbar wirds komplizierter! 1.) Ich habe das ganze Internet nach Material durchforstet. Ich musste mich wieder einmal so ärgern als ich einen serial2parallel Converter für die den AT89xxxx fand. Ich hasse diesen uC! Gibt es zufällig die Möglichkeit AT89 Assembler Code nach AT90 zu konvertieren?? Ich frage deshalb weil es ein Programm namens SourceGuru gibt, das es schafft, Z80 nach M68k zu portieren. Der Sourcecode für den serial2parallel converter wäre im Anhang. 2.) Also wenn ich das ganze auf eigene Faust löse. Habe ich das so richtig verstanden, dass ich: Einfach das erste Byte sende. Dann STROBE auf LOW (=0) lege, BIS ich auf ACK ein HIGH erhalte? Doch wie lange bleibt das HIGH auf ACK? Solange bis ich wieder ein neues Byte sende und STROBE nach LOW lege? (Ich glaube Strobe ist active high, also standardmässig high, oder?) Kennt wer irgendeine detaillierte Beschreibung für den Parallelport in Verbnindung mit Drucker? Wo auch wirklich das dabeisteht was ich oben frage, d.h. wie lange ich z.B. STROBE auf LOW setzen muss oder wie lange der Drucker ACK auf HIGH legt. Also jetzt schaut es fast danach aus als ob ich einen Puffer brauchen würde. Ich schreib einfach alles was seriell kommt in einen Puffer (reichen 100Byte?) und arbeite währenddessen den Puffer ab indem ich ein neues Byte nach D0-D7 schreibe, STROBE auf LOW lege, warte bis ACK empfangen wird unsw... Oder ist es so, dass ich STROBE einfach immer umpolen muss wenn ein neues Zeichen zu schicken ist? Also standardmässig ist es auf HIGH. Beim ersten Byte geht es auf LOW dann wieder auf HIGH unsw? Und vielen Dank für deinen Tipp, ich werde Holger fragen! Also danke noch einmal Niki
So hier zwei Adressen: http://www.orf.at/teletext/cbarchiv/pcprg070.txt http://www.heise.de/ct/95/05/284/ Es gibt sicher noch mehr.... PS: 0x7161626f6e ist das wirklich dein Nickname? Bis dann, Ingo.
Hallo und vielen Dank für die Links! Ich hab beide mit Begeisterung durchgelesen! Ich find es sooo schade dass jetzt 2 Feiertage sind, so kann ich 2 ganze Tage lang die Elektronik Sachen nicht einkaufen :(( Wenn ich einen EPROMMER hätte würde ich sofort das Projekt von c't bauen, aber solche Dinger die so einen EPROM beschreiben können kosten ja 150€ aufwärts oder? Oder gibts da ne einfache billige Lösung? (Theoretisch könnte es ja auch mit dem Parallelport, passendem Programm ohne zusätzliche Peripherie gehen oder?) Jedenfalls hab ich jetzt schon eine Idee wie ich das mit meinem AT90S2333 (den ich zhaus herumliegen habe) anstellen könnte. Zum Glück ist das Programm dort auch in Pascal und nicht in Asm geschrieben, ok, C rulez. 1.) Wenn ich schon eine AVR Schaltung habe (ich arbeite mit isp_avr) könnte ich doch theoretisch einfach diese nehmen um den AVR zu programmieren und beim Adapter (u.a. aus Platzgründen) ISP weglassen. Kann ich in diesem Fall RESET direkt auf VCC legen? Für was ist überhaupt dieser 47pF gut? 2.) Kann ich Die Datenlinien und die STROBE Linie einfach so dranschliessen oder wäre ein Widerstand von Nutzen? 10kOhm? 3.) In der Schaltung von c't (im Anhang) sind solche komischen Dreiecke an den Datenleitungen. Was bedeuten die? 4.) Wieso wird bei c't die CTS Leitung durch den MAX232 gelegt? Heisst das Dreieck mit Punkt nicht "Interieren"? 5.) Wieso hat die BUSY Leitung bei c't einen 47pF Kondensator gegen GND? 6.) Der AVR hat ja schon interne Pullups. Soll ich trotzdem bei der BUSY Leitung einen Pullup setzen? Wenn ja, wie gross? 10kOhm? 7.) Ich verstehe das mit dem Jumpern nicht. Angenommen der Parallelport ist noch nicht angeschlossen, dann hat (bei c't) der Port1 als Eingang einen nicht definierten logischen Pegel, da die Eingänge sozusagen in der Luft hängen und weder an VCC noch an GND sind, ist das richtig? Ist die obere Leitung (die zu P3.4) GND? Wieso hängt das dann ZUSÄTZLICH an P3.4? Würde es nicht reichen, es einfach an GND zu hängen? Zu deiner Frage: Ja, es ist mein Nickname. Wie du siehst, eine 32Bit Zahl, also 4Bytes, hexadezimal. Wenn du dir das in der ASCII Tabelle ansiehst und umdrehst kommt mein "wirklicher" (alter) Nick heraus, den den du auch auf meiner Homepage findest (und auch in der URL enthalten ist :)) Vielen Dank!! Niki
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.