PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Drucker mit AVR ansteuern - Part 2



CapSob
11.12.2006, 00:00
Hi RN-User!

Ja, ich nehm mein altes Projekt wieder auf. Hab irgendwie wieder neuen Mut gefunden, jetzt das Projekt komplett durchzuziehen.

Für die, die nochmal den alten Thread sehen wollen: Alter Thread (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=20545&highlight=)

Hab mal wieder eine kleine Doku angefangen, diesmal aber mit einem neuen Namen (vllt lags ja auch daran :-s ). Jetzt bitte ich die Profis (z.B. Vitis & Mehto) gerade den Teil "Datenübertragung - Praxis" auf Richtigkeit zu überprüfen, ob ich alles richtig verstanden habe.

Als nächstes werde ich dann mal die Hardware aufbauen. Hoffe, dass ich dann wieder so eine super Unterstützung beim coden erhalte.

@ Mehto: Ich versteh deine ASM-Routine immer noch nicht... Sry...


Bis dann erstmal,
euer CapSob!

CapSob
11.12.2006, 23:50
Hier mal der "vorraussichtliche" Code:



$regfile = "m8def.dat"
$crystal = 1000000

Ddrb = &B00000000 'Port B komplett als Eingang
Ddrc = &B00001111 'Am Port C PC0 bis PC3 Ausgang, Rest Eingang
Ddrd = &B11111111 'Port D komplett als Ausgang

Portb = &B00011110 'Pullup für PB1 bis PB4 aktivieren (Taster)
Portc = &B00001111 'Beim starten auf 0 setzen
Portd = &B00000000 'Beim starten auf 0 setzen

Dim Nutzdaten As String * 30
Dim Textstring As String * 30
Dim Bytewerte(30) As Byte At Textstring Overlay
Dim X As Byte
Dim Y As Byte

Led_gruen Alias Portc.0
Led_rot Alias Portc.1
Taster1 Alias Pinb.1
Taster2 Alias Pinb.2
Taster3 Alias Pinb.3
Taster4 Alias Pinb.4

Strobe Alias Portc.3
Init_signal Alias Portc.2
Busy Alias Pinb.5
Ack_signal Alias Pinb.6

'Portd ist DATA0 - DATA7 der Centronics Schnittstelle

Led_gruen = 0 'LED Grün an
Led_rot = 0 'LED Rot an

Wait 1 'Test, ob beide LEDs funktionieren

Led_rot = 1 'LED Rot aus


Do
If Taster1 = 0 Then 'Taster 1 gedrückt
Textstring = "!R! STAT1; EXIT; {012}"
Gosub Senddata 'Rote LED aus
Waitms 50 ' wegen dem Tastenprellen
End If
If Taster2 = 0 Then 'Taster 2 gedrückt
Textstring = "!R! FRPO I1, 1; EXIT;"
Gosub Senddata
Waitms 50 ' wegen dem Tastenprellen
End If
If Taster3 = 0 Then 'Taster 3 gedrückt
Textstring = "!R! ELOG; EXIT;"
Gosub Senddata
Waitms 50 ' wegen dem Tastenprellen
End If
If Taster4 = 0 Then 'Taster 4 gedrückt
Waitms 50 ' wegen dem Tastenprellen
End If
Loop


Senddata:
Led_gruen = 1 'Grüne LED aus

Do
Loop Until Busy = 1

Led_rot = 0
Init_signal = 0 'Init-Signal auf Low zum initialisieren
Waitms 50 '50 millisekunden warten
Init_signal = 1
Waitms 50

Y = Len(textstring)
For X = 1 To Y Step 1
Portd = Bytewerte(x)
Waitms 10
Strobe = 1
Waitms 10
Strobe = 0

do
'Wartet, bis der Drucker ein ACK gesendet hat, um sicher zu gehen, dass kein Zeichen verloren geht
loop until Ack_signal = 1

Next X

Led_gruen = 0 'Grüne LED an
Led_rot = 1
Return

End


Was meint die Mehrzahl dazu? Irgendwelche Verbesserungsvorschläge? Neu ist eigentlich bloß, dass mit "Do - Loop until ACK = 1" vorgesorgt wird, dass keine Bytes verloren gehen.

CapSob
20.12.2006, 20:21
Sodelle, hab jetzt grad mal die Testschaltung aufgebaut. Alles angeschlossen und nochmals den Code überarbeitet.

Test: ES FUNKTIONIERT!!! (Nein, Shift-Taste ist OK, freu mich bloß :) )

Ich bekomm jetzt akkurat die Übertragung hin, wie sie vom PC kommt. Überprüft habe ich das ganze mit einem HexDump von der PC-Seite und mit einem HexDump von der AVR-Seite.

Jetzt gehts weiter mal ein Platinen-Layout zu erstellen und einen Prototyp mal zu bauen.

Thx @ all!

peace, cap.

Vitis
20.12.2006, 23:33
Gratulation, ich hoffe Du musstest nichtmehr zuviel ändern.
Hab die Tage schon dran gedacht mich nach dem Stand zu erkundigen,
hat sich ja dann erledigt ;)