 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 06.10.2006, 15:27 Titel: Was ist an diesem Programmiercode falsch |
|
|
OPEN "COM1:75,N,8,1" FOR INPUT AS #1
OUT &H3FB, 0
OUT &H3FC, 0
input "Wollen Sie das Testprogramm starten?",ja$
if ja$ = "ja" then
do
bi1$ = "1000010000000000"
bi2$ = "1000001000000000"
bi3$ = "1011000100000000"
bi4$ = "1100100010000000"
bi5$ = "1000100001000000"
bi6$ = "1000100000100000"
bi7$ = "1111000000010000"
FOR i = 1 TO 16
binaer$ = RIGHT$(bi1$, i)
if binaer$ = "1" then
OUT &H3FB, 64
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
OUT &H3FB, 0
else
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
end if
NEXT
sleep 100
FOR i = 1 TO 16
binaer$ = RIGHT$(bi1$, i)
if binaer$ = "1" then
OUT &H3FB, 64
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
OUT &H3FB, 0
else
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
end if
NEXT
sleep 100
FOR i = 1 TO 16
binaer$ = RIGHT$(bi1$, i)
if binaer$ = "1" then
OUT &H3FB, 64
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
OUT &H3FB, 0
else
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
end if
NEXT
sleep 100
FOR i = 1 TO 16
binaer$ = RIGHT$(bi1$, i)
if binaer$ = "1" then
OUT &H3FB, 64
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
OUT &H3FB, 0
else
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
end if
NEXT
sleep 100
FOR i = 1 TO 16
binaer$ = RIGHT$(bi1$, i)
if binaer$ = "1" then
OUT &H3FB, 64
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
OUT &H3FB, 0
else
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
end if
NEXT
sleep 100
FOR i = 1 TO 16
binaer$ = RIGHT$(bi1$, i)
if binaer$ = "1" then
OUT &H3FB, 64
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
OUT &H3FB, 0
else
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
end if
NEXT
sleep 100
FOR i = 1 TO 16
binaer$ = RIGHT$(bi1$, i)
if binaer$ = "1" then
OUT &H3FB, 64
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
OUT &H3FB, 0
else
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
end if
NEXT
sleep 100
loop
end if
CLOSE #1 |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 06.10.2006, 15:28 Titel: |
|
|
die [code] tags fehlen.. wenn die da sind such ich weiter  _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 06.10.2006, 16:14 Titel: |
|
|
Hallo
Da fehlen nicht nur die Code-Tags, sondern auch eine vernünftige Frage. Es wäre schön, wenn du dein Problem etwas genauer beschreiben würdest. Z.B. was willst du machen und was genau funktioniert nicht so, wie du willst. Ansonsten ist da wieder dein altes Problem. Du kannst ENTWEDER mit OPEN COM arbeiten, dann wird die Datenübertragung intern vom Rechner gesteuert, Das geht aber nur mit entsprechenden Geräten, die dieses Übertragungsprotokoll beherrschen. ODER du schaltest einzelne Leitungen mit OUT oder frägst sie mit INP(x) ab. Dann gibt es auch keine Baudrate, das Tempo wird nur von der Geschwindigkeit von QB bestimmt. Ansonsten fällt mir auf, dass du überall bi1$ als Variable verwendest und immer das gleiche machst. Ob das falsch ist, weiss ich aber nicht, weil du ja nichts dazu geschrieben hast. Abgesehen davon, könnte man das Ganze sicher kürzer und "eleganter" schreiben.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 06.10.2006, 16:15 Titel: |
|
|
' öffnet den Com Port
OPEN "COM1:75,N,8,1" FOR INPUT AS #1
'Setzt das Register 1019 auf 0
OUT &H3FB, 0
'Setzt das Register 1020 auf 0
OUT &H3FC, 0
input "Wollen Sie das Testprogramm starten?",ja$
if ja$ = "ja" then
'Schleifenanfang
do
'hier sind verschiedene Bitmuster, die für die Schieberegister übernommen werden sollen. Indem Fall wären es jeweils immer 16 Bit.
bi1$ = "1000010000000000"
bi2$ = "1000001000000000"
bi3$ = "1011000100000000"
bi4$ = "1100100010000000"
bi5$ = "1000100001000000"
bi6$ = "1000100000100000"
bi7$ = "1111000000010000"
'erstes Bitmuster hinein
FOR i = 1 TO 16
'von rechts nach links lesen....Bei den anderen ebenso
binaer$ = RIGHT$(bi1$, i)
if binaer$ = "1" then
OUT &H3FB, 64
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
OUT &H3FB, 0
else
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
end if
NEXT
sleep 100
'zweites Bitmuster hinein
FOR i = 1 TO 16
binaer$ = RIGHT$(bi2$, i)
if binaer$ = "1" then
OUT &H3FB, 64
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
OUT &H3FB, 0
else
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
end if
NEXT
sleep 100
'drittes Bitmuster hinein
FOR i = 1 TO 16
binaer$ = RIGHT$(bi3$, i)
if binaer$ = "1" then
OUT &H3FB, 64
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
OUT &H3FB, 0
else
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
end if
NEXT
sleep 100
'viertes Bitmuster hinein
FOR i = 1 TO 16
binaer$ = RIGHT$(bi4$, i)
if binaer$ = "1" then
OUT &H3FB, 64
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
OUT &H3FB, 0
else
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
end if
NEXT
sleep 100
'fünftes Bitmuster hinein
FOR i = 1 TO 16
binaer$ = RIGHT$(bi5$, i)
if binaer$ = "1" then
OUT &H3FB, 64
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
OUT &H3FB, 0
else
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
end if
NEXT
sleep 100
'sechtes Bitmuster hinein
FOR i = 1 TO 16
binaer$ = RIGHT$(bi6$, i)
if binaer$ = "1" then
OUT &H3FB, 64
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
OUT &H3FB, 0
else
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
end if
NEXT
sleep 100
'siebtes Bitmuster hinein
FOR i = 1 TO 16
binaer$ = RIGHT$(bi7$, i)
if binaer$ = "1" then
OUT &H3FB, 64
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
OUT &H3FB, 0
else
OUT &H3FC, 2
sleep 1
OUT &H3FC, 0
end if
NEXT
sleep 100
'Schleifenende
loop
end if
'COM Schnittstelle wieder schliessen
CLOSE #1
ES seie noch gemerkt, dass ich Strobe an 5 Volt gehängt habe.......
Damit sind die Ausgänge immer aktiv. |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 06.10.2006, 16:21 Titel: |
|
|
Was für ein Schieberegister ist das dann, das du da ansteuern willst, was geht nicht und warum hälst du so krampfhaft an dem OPEN COM fest?
EDIT: Die Steuereingänge von Schieberegistern arbeiten in der Regel Flankengesteuert, d.h. es wird nur der Wechsel von 0 auf 1 erkannt. Strobe auf Dauerplus zu legen, bringt also nichts. _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 06.10.2006, 16:27 Titel: |
|
|
Ich benutze den 4094 "den seriell -> parallel Wandler".
Ich benutze freebasic zur Programmierung.
geht es dort auch ohne OPEN COM?
Ich habe momentan Strobe an Dauerplus vom PC Netzteil und es zeigt mir alles so an wie ich will.... |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 06.10.2006, 16:54 Titel: |
|
|
Wenn du selbst sagst, dass es FB-Code ist - warum postest du das dann in den QB-Bereich? xD
Oder war das wieder so eine Sache a la: "hab das ausversehn gemacht, war mir peinlich, da hab ich das einfach net gesagt"? _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 06.10.2006, 17:41 Titel: |
|
|
Hallo
Mit FB kenne ich mich nicht aus, aber ich denke nicht, dass man dort OPEN COM braucht. Damit wird eine ganz andere, fest vorgeschrieben Form der Datenübertragung gestartet. Wenn du einzelne Pins am COM-Port ein- und ausschaltest, machst du dir ja dein eigenes "Protokoll". Ein Modem z.B. beherrscht die Kommunikation mit dem COM-Port, wie sie mit OPEN COM initialisiert wird. Ein einfacher IC wie der 4094 nicht. OPEN COM "ruft" z.B. erst mal das angeschlossene Gerät und erwartet eine Antwort, die so ein Schieberegister nicht geben kann.
Noch ein Tip für FB und QB. Du kannst auch mit zweidimensionalen Arrays arbeiten, also z.B. bi$(a,b). Wenn du dann zwei Schleifen für a und b ineinanderschachtelst, brauchst du nicht sieben mal das gleiche zu schreiben.
Code: | FOR a = 1 TO 7
FOR b = 1 to 16
binaer$ = RIGHT$(bi$(a, b))
...
NEXT
NEXT |
Und dann eben noch das mit dem Strobe beachten. Da brauchst du eine dritte Leitung, die nach den 16 Datenbits ein Übernahmesignal sendet. Dauerplus geht wie gesagt nicht und selbst wenn es ginge, wäre der Sinn der Sache verfehlt, denn es soll ja dafür sorgen, dass die Daten erst auf die Ausgänge gelegt werden, wenn das Schieben komplett ist.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 06.10.2006, 19:09 Titel: |
|
|
Nun zur Problematik:
Ich habe eine Datenleitung TXD um ein Bit zu setzen oder nicht.
out 1019,64
Ich habe eine Datenleitung RTS um ein Bit weiterzuschieben.
out 1020,2
Ich habe eine Datenleitung DTR um die Ausgänge zu aktivieren.
out 1020,1
Nur bekomme ich keine positive Spannung bei DTR, wenn ich dort eine anlege.
Hier eine Beschreibung des Com Ports.
Ich benutze die 25 Pin Version.
Hoffe ihr könnt mir helfen.
http://www.easysw.com/%7Emike/serial/serial.html |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 06.10.2006, 19:37 Titel: |
|
|
Also da gibt es meiner Meinung nach nur zwei Ursachen. Entweder du hast den falschen Pin erwischt, oder der Port hat eine Macke, was aber eigentlich unwahrscheinlich ist. Benutzt du ein Verlängerungskabel?
Hier übrigens eine gute Erkärung incl. Pinbelegung auf deutsch: www.franksteinberg.de/progss.htm _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 06.10.2006, 20:04 Titel: |
|
|
Michael Frey hat Folgendes geschrieben: | Lass doch einfach das Open COM weg. |
Das haben ihm jetzt schon mehrere Leute gesagt. Siehe LM75-Thread im Profiforum. Aber irgendwie kann er's nicht lassen... _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|