Forum: Mikrocontroller und Digitale Elektronik bascom instr


von frage (Gast)


Lesenswert?

Hallo,
ich habe eine Frage zu instr.

In basic geht folgender Befehl:
if instr(text,"Hallo") > 0 then

end if

aber anscheinend unter bascom nicht.
Keine Ahnung wieso.

von Karl M. (Gast)


Lesenswert?

Dann schau mal hier nach:

https://avrhelp.mcselec.com/index.html?instr.htm

Wird wohl auch daran liegen, dass Mann und Frau immer eine Variable 
nutzen muss.

von frage (Gast)


Lesenswert?

Ich nutze software uart.
Die Variabellänge text wächst natürlich an, vorher habe ich den Inhalt 
der Variabele gelöscht.
Wenn ich bla(1) u. bla(2) nutze, funktioniert es.
Es schaltet eine Led an, oder deaktiviert eine Led.
Nehme ich aber für bla(1) z.b "weiter" u. für bla(2) z.b "stopp" 
funktioniert es nicht und ich weiss nicht wieso.


Folgenden Programmiercode habe ich:
$regfile = "m8def.dat"
$crystal = 1000000
Baud = 9600

$swstack = 32
$hwstack = 32
$framesize = 40


Config Portb.0 = Output
Led Alias Portb.0

Dim Text As String * 64
Dim Var As Byte
Dim Pos(2) As Byte
  Dim Bla(2) As String * 24
  Bla(1) = "a"
  Bla(2) = "b"

Text = ""

Open "comd.0:9600,8,n,1" For Input As #1
   Do
      Var = Inkey(#1)
         If Var <> 0 Then
            Text = Text + Chr(var)
            Gosub Pruefen
         End If
   Loop
Close #1
End

Pruefen:
   Pos(1) = Instr(text , Bla(1))
      If Pos(1) > 0 Then
         Led = 1
         Text = ""
      End If
   Pos(2) = Instr(text , Bla(2))
      If Pos(2) > 0 Then
         Led = 0
         Text = ""
      End If
Return

von frage (Gast)


Lesenswert?

Hat keiner eine Lösung für das Problem?
Schade

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du könntest ja mal den Inhalt Deiner Variablen "text" irgendwohin 
ausgeben.

von frage (Gast)


Lesenswert?

@Rufus Τ. F....danke für den Hinweis...werde es gleich nochmal 
testen...beim ersten Test kamen ganz andere Zeichen an rx raus, obwohl 
ich was ganz anderes bei tx gesendet hatte.

von Norbert S. (norberts)


Lesenswert?

frage schrieb:
> $regfile = "m8def.dat"
> $crystal = 1000000

Moin,

Lass mich raten: Interner RC-Oszi/8?
9600baud bei 1MHz ergibt 7,84% Fehler. Das kann nicht funktionieren.
Mit 4800 könnte es mit Glück funktionieren.

Grundsätzlich geht das mit dem internen RC vielleicht mal zufällig, der 
ist zu ungenau für Uart, vor allem bei dem ollen Mega8.
Nein, mit 8MHz oder geringerer Baudrate wird die Ungenauigkeit nicht 
besser!
Mit 1MHz und 9600 funktioniert es aber ziemlich sicher gar nicht.

Gruß,
Norbert

von frage (Gast)


Lesenswert?

@Rufus Τ. F. ..ja hat geklappt, also ich sende Daten zum Atmega u. 
schicke sie dann direkt wieder über seriell zurück.
UND ja..es gab fehlerhafte Informationen...
DAHER nochmal einen dicken Dank an Norbert S.

Bei software uart, klappt es bei mir mit einer Taktfrequenz von 1 MHZ 
nur mit 1200 baud...

Nochmal vielen Dank für die nützlichen Informationen.

von frage (Gast)


Lesenswert?

Ich korrigiere mich...leider nur eine baudrate von 600

von Norbert S. (norberts)


Lesenswert?

Moin,

Der Baudratenfehler ist rechnerisch bei 600 kein Stück besser als bei 
1200.
Daß das ein Trugschluss ist, kann man nicht oft genug wiederholen.
Es war dann nur Zufall, daß es bei 600 besser ging.
Der RC ist zu ungenau! Geringere Baudrate macht es nicht besser!

Gruß,
Norbert

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.