- LiFePO4 Speicher Test         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: Drucker mit AVR ansteuern?

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.02.2005
    Ort
    Freiburg
    Alter
    36
    Beiträge
    602
    Anzeige

    Praxistest und DIY Projekte
    Ja, jedes Zeichen must du schon einzeln übertragen, glaub mir, das wäre besser als ein 128 bit Datenbus....
    Aber das programmiert man sich einfach so das man einen String einfach nach und nach überträgt...

    Bis jetzt schöne Doku, nur würde ich den Text von meine Seite nicht eins zu eins rein kopieren, änder ihn irgend wie noch ein wenig ab, so das man ihn nicht sofort wieder erkennt.

    Wenn jemand dann mal auf meine Seite stoßen sollte und sich dann wieder an den Text erinnert macht sich das nicht so gut
    Sonst denkt jemand womöglich noch ich hätte den Text auch schon irgendwo her kopiert, dabei hab ich mir so viel Mühe gegeben...
    Veruche daher den Text bitte nochmal in eigene Worte zu fassen.


    Gruß,
    Mehto
    -

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    Ok, schade eigentlich. Muss ich halt jedes Zeichen einzeln übergeben... *heul*

    @Mehto: Würde es dir was ausmachen, wenn ich deine Homepage als Quelle angebe, sodass ich den Text stehen lassen kann? Ich weiß schon, wieviel arbeit eine eigene Homepage ist...

    mfg,
    cap.

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.02.2005
    Ort
    Freiburg
    Alter
    36
    Beiträge
    602
    Zitat Zitat von CapSob
    Ok, schade eigentlich. Muss ich halt jedes Zeichen einzeln übergeben... *heul*
    Das ist doch selbst in Assembler kein Problem, und in Bascom dann doch drei mal nicht
    Guck dir mal das an: (in Assembler)
    http://www.mikrocontroller.net/tutorial/memory

    @Mehto: Würde es dir was ausmachen, wenn ich deine Homepage als Quelle angebe, sodass ich den Text stehen lassen kann? Ich weiß schon, wieviel arbeit eine eigene Homepage ist... .
    Ok, wenn du die Quelle angibst ist das von mir aus ok.
    Aber was ich das letzte finde ist, wenn andere sich die Arbeit machen und einer kopiert sich das dann einfach zusammen und macht sein Geld damit.
    Aber ich denke das ist bei dir ja nicht der Fall, Außerdem hast du ja schon etwas eigenes gemacht...

    Viele Grüße,
    Mehto
    -

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    Danke Mehto. Ich geb eigentlich immer ne Quelle an. Aber da ich vorher schnell schnell gemacht hab, dass ich die Datei online stellen kann, hab ich da wohl was übersehen. Keine Angst. Geld damit machen werde ich nicht. Falls das Projekt nachher funktioniert, werde ich 3 - 4 Stück noch für meine Kollegen machen, und das wars.


    @ all: Melde mich, wenn ich weiter gekommen bin!

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    Also, hab mich grad bissl hingesetzt und den ersten Programmteil geschrieben. Nun würde ich gerne von euch wissen, ob dies so passt.

    Verbesserungsvorschläge sind gewünscht!

    peace,
    cap.
    Angehängte Dateien Angehängte Dateien

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    ok, das Prinzip wurde erkannt, es sollte so in etwa funktionieren,
    aber ... es gibt immer ein aber ... viel zu kompliziert

    Code:
    dim textstring as string * 20
    dim buchstabe as string *1
    dim y as byte
    dim x as byte
    
    textstring="STAT1; EXIT; "
    textlaenge=len(textstring)
    for x=1 to textlaenge step 1
        buchstabe=mid(textstring,x,1)
        y=chr(buchstabe)
        Portd=y
        gosub Drucker_senden
    next x
    man verwendet gosub, weil man dann an genau die gleiche stelle
    über return zurückspringt ... ist schöner als goto.
    so in etwa könnts laufen und der Text ist viel flotter änderbar.
    man sehe, die Bytes werden einer nach dem andern an den Drucker
    geschickt, aber man kann das auch in ner Schleife unterbringen

    oder andere Variante:
    Code:
    dim textstring as string * 20
    dim bytewerte(20) as byte at textstring overlay
    dim x as byte
    dim y as byte
    
    textstring="STAT1; EXIT; " 
    y=len(textstring)
    for x = 1 to y step 1
        Portd=bytewerte(x)
        gosub Drucker_senden
    next x
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    Ja Servus!

    Hab grad die Elektronik fertig gebastelt, Billig-Programmer schnell gebaut, Software war ja schon fertig.

    Jetzt schnell Datei rüberschieben und testen - und? Blöd... (S+c+h+e+i+s+s+e wurde zensiert...)

    Probleme:
    1. Hab ihm programmiert, dass er beim einschalten beide LEDs für 1 sek. anmacht, so als funktionstest der LEDs sozusagen. Aber die LEDs leuchten so locker 3-4 sek. Timing-Problem. Fuses? Externer Quarz mit 2 Kondis sind dran.

    2. Ich starte, nachdem der DST "gebootet" hat, das Programm 1. OK, Status-LED Grün geht aus, dafür die Rote an. Passt. Aber kommt was am Drucker raus? Nein.

    Hier mal die Software:
    Code:
    $regfile = "m8def.dat"
    $crystal = 16000000
    
    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
    
    Portc.0 = 0                                                 'LED Grün an
    Portc.1 = 0                                                 'LED Rot an
    
    Wait 1                                                      'Test, ob beide LEDs funktionieren
    
    Portc.1 = 1                                                 'LED Rot aus
    
    
    Do
    If Pinb.1 = 0 Then                                          'Taster 1 gedrückt
       Gosub Dst1
    End If
    If Pinb.2 = 0 Then                                          'Taster 2 gedrückt
       Gosub Dst2
    End If
    If Pinb.3 = 0 Then                                          'Taster 3 gedrückt
       Gosub Dst3
    End If
    If Pinb.4 = 0 Then                                          'Taster 4 gedrückt
       Gosub Dst4
    End If
    Loop
    
    
    Dst1:                                                       'Programm 1: Statusseite 1 und 2
    Portc.0 = 1                                                 'Grüne LED aus
    Portc.1 = 0                                                 'Rote LED an
    Gosub Drucker_init
    Portd = 33                                                  '!
    Gosub Drucker_senden
    Portd = 82                                                  'R
    Gosub Drucker_senden
    Portd = 33                                                  '!
    Gosub Drucker_senden
    Portd = 32                                                  'Leerzeichen
    Gosub Drucker_senden
    Portd = 83                                                  'S
    Gosub Drucker_senden
    Portd = 84                                                  'T
    Gosub Drucker_senden
    Portd = 65                                                  'A
    Gosub Drucker_senden
    Portd = 84                                                  'T
    Gosub Drucker_senden
    Portd = 59                                                  ';
    Gosub Drucker_senden
    Portd = 83                                                  'S
    Gosub Drucker_senden
    Portd = 84                                                  'T
    Gosub Drucker_senden
    Portd = 65                                                  'A
    Gosub Drucker_senden
    Portd = 84                                                  'T
    Gosub Drucker_senden
    Portd = 49                                                  '1
    Gosub Drucker_senden
    Portd = 59                                                  ';
    Gosub Drucker_senden
    Portd = 69                                                  'E
    Gosub Drucker_senden
    Portd = 88                                                  'X
    Gosub Drucker_senden
    Portd = 73                                                  'I
    Gosub Drucker_senden
    Portd = 84                                                  'T
    Gosub Drucker_senden
    Portd = 59                                                  ';
    Gosub Drucker_senden
    Portd = 12                                                  'Form Feed
    Gosub Drucker_senden
    Portc.0 = 0                                                 'Grüne LED an
    Portc.1 = 1                                                 'Rote LED aus
    Return
    
    
    Dst2:
    Return
    
    
    Dst3:
    Return
    
    
    Dst4:
    Return
    
    
    Drucker_senden:
    Portc.3 = 1                                                 'Stobe aktivieren
    Waitus 10                                                   '10 mikrosekunden warten
    Portc.3 = 0                                                 'Daten übernommen
    Return
    
    
    Drucker_init:
    Portc.2 = 0                                                 'Init-Signal auf Low zum initialisieren
    Waitus 50                                                   '50 mikrosekunden warten
    Portc.2 = 1                                                 'Drucker ist initialisiert
    Return
    
    
    End
    Im Anhang gibts auch nochmal das Programm zum downloaden.

    BITTE HELFT MIR ! ! !

    mfg,
    cap.


    EDIT:
    Mir ist grad aufgefallen, dass ich zwar BUSY angeschlossen habe, aber ich irgendwie in meiner programmierung nicht auftaucht. Kann das ein/das Problem sein?

    Wegen Fuses setzen hab ich bissl Angst, davor mir den uC zu schießen. Ich benutz zum "brennen" PonyProg. Bitte helft mit da, das mein erstes richtiges AVR Projekt ist. Hatte bis jetzt noch keine wirklichen Erfolge mitm AVR, will das endlich mal ein AVR-Projekt klappt!

    EDIT2:
    Wie sieht des eigentlich aus wegen dem Strobe-Signal? High oder Low? In meiner Programmierung gebe ich auf das Strobe-Signal 10 usek. ein High-Signal, nach dem ersten Byte - usw... Kann es auch daran liegen?
    Angehängte Dateien Angehängte Dateien

  8. #18
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    bei den Fuses brauchste Dir keinen kopf machen,
    die kannste übrigens auch in Bascom setzen,
    änderst auf Crystal = 1000000 also 1 MHz und schon ist die
    Sache gut. Für die Anwendung brauchste eh keine 16MHz
    und der AVR läuft vom Werk aus mit 1MHz.

    Aber auf alle Fälle würd ich den Programmer von Bascom
    verwenden, der kann die Fuses prima und deutlich
    einfacher als Pony ("wieher")

    Der Busy sollte schon mit rein, währ sinnvoll und kann durchaus
    die Quelle sein. Der Busy ist ja für die Flusssteuerung
    wichtig.

    also, du hast da "Wait 1" und "$crystal = 16000000",
    wenn du die Fuses nicht auf extern stehen hast läft Dein Mega auf 1MHz.
    Das weiß aber Bascom nicht, ergo baut es ne Warteschleife, die um
    den 16-Fachen Wert zu lange ist in Dein Programm.
    Abhilfe, wie gesagt, "$Crystal = 1000000"

    hab mal kurz gebastelt, probiers mal so: (Datei im Anhang)
    Angehängte Dateien Angehängte Dateien
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    @ vitis:

    Wow, danke erstmal!

    Hab aber da 1 Fehler:

    Code:
    Dim Bytewerte(30) As Byte At Textstring Overlay
    Da bringt er mir nen Error: Adress out of bounds / Error 90

    und mir ist folgendes aufgefallen:

    Code:
    Declare Sub Senddata(byval Nutzdaten As String)
    
    Dim Textstring As String * 30
    Müsste da eigentlich nich statt Nutzdaten, Textstring stehen?

    mfg,
    cap.


    EDIT:
    Ämm... ich hab gar kein ACKN. Laut Mehto´s Dokumentation auf seiner Seite braucht man das nicht, da man sich irgendwie ans Busy-Signal orientiert...?
    Angehängte Dateien Angehängte Dateien

  10. #20
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Ok, dann ohne Ackn, so genau hab ich mir mehtos Seite nicht
    angesehen.

    Der Textstring ist Dein "Kontainer" in den Du den zu übertragenden
    Befehl reinspeicherst.

    Die Nutzdaten sind die an die Subprozedur zu übergebenen Daten,
    die dann in der Sub verarbeitet werden sollen. Im Prinzip
    kannste die gleichsetzen, aber ich finds von der Logik her
    schöner wenn man da 2 Paar Schuhe verwendet.

    War auch nur so mal schnell in 5 MInuten zusammengeklickt,
    also wenig Ansprüche auf Perfektion

    Bei mir lässt sich das Progrämmchen ohne Beanstandungen
    von Bascom Compilieren, welche Version verwendest Du ?

    Ach so, schau mal in den Compiler Einstellungen nach Stack Frame usw.,
    da sollten evtl. auch n paar Werte rein

    Dann eben anders:
    Angehängte Dateien Angehängte Dateien
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress