Liste der Anhänge anzeigen (Anzahl: 1)
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.
Liste der Anhänge anzeigen (Anzahl: 1)
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?
Liste der Anhänge anzeigen (Anzahl: 1)
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)
Liste der Anhänge anzeigen (Anzahl: 1)
@ 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...?
Liste der Anhänge anzeigen (Anzahl: 1)
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: