-
        

Ergebnis 1 bis 4 von 4

Thema: Drucker mit AVR ansteuern - Part 2

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162

    Drucker mit AVR ansteuern - Part 2

    Anzeige

    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

    Hab mal wieder eine kleine Doku angefangen, diesmal aber mit einem neuen Namen (vllt lags ja auch daran ). 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!
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    Hier mal der "vorraussichtliche" Code:

    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.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    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.

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    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
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •