PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variablen-/Cases- und Analogwert-Problem in Bascom



High Light
19.12.2010, 16:33
Hallo zusammen,

und zwar habe ich in meinem Programm ein paar Fehler:
- der Servo bekommt keine Wert. Vermute es liegt daran, dass ich mit
Variablen arbeite, weil wenn ich direkt die Werte an den Servo gebe, also
ohne Variablen, dann geht es. :-s Könnte es sein, dass ich einen andere
Datentyp anstelle von "WORD" nehmen muss? Wenn ja welcher???

- das zweite Problem ist, dass die Cases auch nicht funktioneren. Hatte es
mir so vorgestellt, dass ich die Variable Z immer um 1 erhöhe, und so von
Case zu Case gehe. Wenn Z = 3 ist soll sie wieder auf 0 gesetzt werden.
Und das ganze beginnt von vorn.
Entweder es liegt hier auch wieder am Datentyp oder es geht nicht so,
dass ich "Select Case Z " nicht schreiben kann oder darf, wenn danach
immer "Case 1", "Case 2" oder "Case 3" aufgerufen werden soll.

Wäre super gut, wenn ihr mir weiter helfen könntet!!!
Wenn ihr eine Alternative habt, ist sie herzlich willkommen, nur würde ich
gern "Waitms" vermeiden.

Grüße High Light

Hier noch der Code:


$regfile = "m48def.dat"
$crystal = 16000000
$baud = 9600


'Servoeinstellungen
Config Servos = 1 , Servo1 = Portd.6 , Reload = 10
Servo(1) = 90

Config Portd.6 = Output

Enable Interrupts

Dim Servostellung1 As Word
Servostellung1 = 90
Dim Servostellung2 As Word
Servostellung1 = 110
Dim Servostellung3 As Word
Servostellung1 = 130

Dim Xpos1 As Byte

'StatusLED
Config Portd.7 = Output
Statusled Alias Portd.7

'Datenausgabe

Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output

'Analogeinstellungen
Const Adc_multi = 0.0048828125 ' = 5.0 / 1024.0
Config Adc = Single , Prescaler = Auto , Reference = Avcc

Start Adc

Dim Messergebnis As Word
Dim Volt As Single

Messergebnis = Getadc(0)
Volt = Messergebnis * Adc_multi


'Arraykonfiguration
Dim Volt_list(3) As Single

'Schrittvariablen
Dim T As Word
Dim Z As Word
Dim Z2 As Word
Z = 0
T = 0

'Timer
Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1
Enable Timer1 'schalte den Timer1 ein
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Timer1 = 3035 'Timer1 soll schon von 3035 wegzählen


Do

Statusled = 1


If T = 1 Then
Select Case Z

'Servostellung 1
Case 1:

Servo(1) = Servostellung 1
T = 0

'Servostellung 2
Case 2:

Servo(1) = Servostellung 2
T = 0

'Servostellung 3
Case 3:

Servo(1) = Servostellung 3
T = 0

End Select
End If

Loop

End


Isr_von_timer1: 'ISR von Timer1
Timer1 = 3035

If Z >= 3 Then
Z = 0
End If

Z = Z2
Z = Z2 + 1
T = 1

Return

Jaecko
19.12.2010, 17:26
Wo kriegt Z2 seinen Wert her?
In der ISR wird Z immer mit dem Wert von Z2 überschrieben. D.h. es wird immer der gleiche Case durchlaufen; Z2 wird wahrscheinlich 0 sein, d.h. Z ist immer 1.

High Light
19.12.2010, 17:34
Ach so :-D ich seh den Fehler ich hatte geschrieben:
Z = Z2
Z = Z2 + 1

und eigentlich müsste es ja so heißen:
Z2 = Z
Z = Z2 + 1

Probier ich gleich mal aus, dankeschön!!!
Was meinst du wegen den Variablen für den Servowert?

Grüße High Light

PicNick
20.12.2010, 08:56
Bascom arbeitet bei Servos mit Bytes,
http://www.rn-wissen.de/index.php/Bascom_Inside-Code#SERVO
d.h. du solltest für die Servovariablen auch nur bytes verwenden

Dann kannst du die Sache einfacher machen:
Im Prinzip wird das Servo immer durch den Timer auf drei verschiedene werte gestellt ( Z ), die aber festgelegt sind.
da kannst du Z gleich als Index für eine Tabelle verwenden und dir das Select ersparen (allerdings geht Z dann nichtmehr 1-3 sondern von 0-2)
Also, reduziert auf das Servo-handling:


$regfile = "m48def.dat"
$crystal = 16000000
$baud = 9600

'Servoeinstellungen
Config Servos = 1 , Servo1 = Portd.6 , Reload = 10

Servo(1) = 90

Config Portd.6 = Output

Enable Interrupts

'Schrittvariablen
Dim Z As BYTE

'Timer
Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1
Enable Timer1 'schalte den Timer1 ein
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Timer1 = 3035 'Timer1 soll schon von 3035 wegzählen


Do
Statusled = 1

Loop

End


Isr_von_timer1: 'ISR von Timer1
Timer1 = 3035

Servo(1) = lookup ( Z, Servo_tabelle)

INCR Z ' Z + 1

If Z > 2 Then
Z = 0
End If


Return

Servo_tabelle:
DATA 90, 110, 130 ' servo-stellungen

High Light
20.12.2010, 20:31
Klasse, bin gerad oberglücklich!!!
Mein Programm läuft, hab es abgeändert und dabei noch 2 bis 3 andere
kleine Fehler gefunden.
Vielen Dank!!!
Morgen probier ich das ganze nach deiner Möglichkeit noch aus, mit der Tabelle.
Als nächstes kommt jetzt dann noch eine Anlogwertauswertung dazu,
welche in ein Array schreiben soll, ob ein bestimmter Wert überschritten
worden ist, oder nicht.

Danke nochmal an euch, und bis bald

Grüße High Light

High Light
21.12.2010, 21:04
Hallo zusammen,

jetzt ist es soweit, dass nächste Problem,
also der Servo fahrt nun seine Positionen an.
Immer wenn er eine Position angefahren hat, soll
ein Analogwert eingelesen, ausgewertet und dann
in ein Array geschrieben werden.
Wenn das Array mit einem bestimmten Wert beschrieben ist,
soll ein Signalausgang geschalten werden.


$regfile = "m48def.dat"
$crystal = 16000000
$baud = 9600


'Servoeinstellungen
Config Servos = 1 , Servo1 = Portd.6 , Reload = 10
Servo(1) = 90

Config Portd.6 = Output

Enable Interrupts

Dim Servostellung1 As Byte
Servostellung1 = 90
Dim Servostellung2 As Byte
Servostellung2 = 110
Dim Servostellung3 As Byte
Servostellung3 = 130

Dim Xpos1 As Byte

'StatusLED
Config Portd.7 = Output
Statusled Alias Portd.7

'Signalausgabe
Signal1 Alias Portd.0
Config Signal1 = Output

Signal2 Alias Portd.1
Config Signal2 = Output

Signal3 Alias Portd.2
Config Signal3 = Output

Signal4 Alias Portd.3
Config Signal4 = Output

Signal1 = 1
Signal2 = 1
Signal3 = 1
Signal4 = 1

'Analogeinstellungen
Const Adc_multi = 0.0048828125 ' = 5.0 / 1024.0
Config Adc = Single , Prescaler = Auto , Reference = Avcc

Start Adc

Dim Messergebnis As Word
Dim Volt As Single

Messergebnis = Getadc(0)
Volt = Messergebnis * Adc_multi


'Arraykonfiguration
Dim Volt_list(3) As Single

'Schrittvariablen
Dim T As Byte
Dim Z As Byte
Dim Z2 As Byte
Z = 0
T = 0

'Timer
Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1
Enable Timer1 'schalte den Timer1 ein
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Timer1 = 3035 'Timer1 soll schon von 3035 wegzählen


Do
'Statusled
Statusled = 1

'Wenn Arrayinhalt = 10 dann SignalX = 0
If Volt_list(1) = 10 Then
Signal3 = 0
Elseif Volt_list(1) = 100 Then
Signal3 = 1
End If

If Volt_list(2) = 10 Then
Signal2 = 0
Elseif Volt_list(2) = 100 Then
Signal2 = 1
End If

If Volt_list(3) = 10 Then
Signal2 = 0
Elseif Volt_list(3) = 100 Then
Signal2 = 1
End If

'Servo stellen und Analogwert auslesen und Arry schreiben
If T = 1 Then
Select Case Z

'Servostellung 1
Case 2:

Servo(1) = Servostellung1
T = 0

If Volt <= 3.0 Then
Volt_list(1) = 100

Elseif Volt > 3.0 Then
Volt_list(1) = 10

End If


'Servostellung 2
Case 4:

Servo(1) = Servostellung2
T = 0

If Volt <= 3.0 Then
Volt_list(2) = 100

Elseif Volt > 3.0 Then
Volt_list(2) = 10

End If


'Servostellung 3
Case 6:

Servo(1) = Servostellung3
T = 0

If Volt <= 3.0 Then
Volt_list(3) = 100

Elseif Volt > 3.0 Then
Volt_list(3) = 10

End If

End Select
End If

Loop

End


Isr_von_timer1: 'ISR von Timer1
Timer1 = 3035

If Z >= 6 Then
Z = 0
End If

Z2 = Z
Z = Z2 + 1
T = 1

Return

Nur funktioniert nichts, der Portd.0 und Portd.1 reagieren gar nicht,
auch wenn sie dierekt geschalten werden. Portd.2 und Portd.3 kann
man direkt schalten, aber mit dem Programm funktioniert es nicht???

Also muss zum einen ein oder mehrere Fehler im Programm sein
und zum anderen versteh ich nicht, warum die ersten 2 Ausgänge nicht
reagieren???
Hat jemand eine Idee???

Grüße High Light

PicNick
22.12.2010, 08:54
Bascom hat eine Eigenheit:
Beim In/out-configurieren ist er schizophren:
Ein ganzes Port wird definier:
CONFIG PORTD = Output
aber einzelne Pin als
CONFIG PIND.0 = Output
CONFIG PIND.1 = Output
CONFIG PIND.2 = Output
CONFIG PIND.3 = Output

d.h. dein Alias kannst du zwar im programm verwenden, aber nicht zum "Output" setzen.

High Light
22.12.2010, 13:00
Ah okey, dass wusste ich nicht, bis jetzt hatte ich damit noch keine
Probleme gehabt. Hab es aber geändert, jedoch ist alles noch wie zuvor.
Als nächstes werde ich mal den Controller tauschen, vlt ist dieser kaputt,
weil die 2 ersten Pins gehen immer noch nicht.
Aber igrendwie stimmt da was mit dem Array nicht, weil an den 2
funktionsfähigen Ausgängen ändert sich nichts, wenn sich das Analogsignal
ändert.
Den wenn sich dieses ändert, müsste sich ja auch der Inhalt des Arrays
ändern?!?
Aber wo liegt der Fehler???

PicNick
22.12.2010, 13:17
SINGLES ( volt_list ) mit "=" abzufragen, klappt oft nicht.

Du schreibst doch ohnehin keine dezimalen rein, nur 100 oder 10
Nimm doch lieber Byte

for_ro
22.12.2010, 13:37
Hallo High Light,
solange du die $baud-Direktive im Programm hast, werden die Pins PIND.0 und PinD.1 als RXD und TXD für den USART verwendet. Nimm die einfach mal raus.
In dem Teil
If Volt_list(3) = 10 Then
Signal2 = 0
Elseif Volt_list(3) = 100 Then
Signal2 = 1
End If
setzt du genau so wie in dem Teil davor den Ausgang Signal2. Ist das gewollt?

High Light
22.12.2010, 16:31
Jap so etwas hatte ich mir inziwschen fast gedacht, dass die Pins
nicht funktionieren wegen einem Fehler im Programm.
Hatte das ganze Ding schon zerlegt, Controller getauscht,
Verbindungskabel überprüft, Fehler auf Leiterplatte gesucht...
Danke, für den Tipp O:)
Das mit dem Signal2 ist ein Fehler durchs Kopieren, wurde auch geändert.
Singel wurde auch auf Byte geändert!

Und siehe da es geht schon mehr:
- Alle 4 Signale funktionieren (auch wenn ich nur 3 brauche)
- Jetzt ist es so, dass mit den ersten 3 Bewegungen, jeweils ein weiteres
Signal kommt. Nach der dritten Servobewegung ändert sich an den Signalen
nichts mehr. Alle 3 Signal sind dann da.
- Die Signale kommen egal was für ein Analogwert vorhanden ist.

Bin mir nur nicht sicher wo der Fehler liegt, so wie ich es gerad sehe,
schreibt er immer die 10 in die Arrays, egal was für ein Analogwert
ansteht.
Seh aber auch keinen Fehler im Programm, bei den Vergleichen oder beim Array beschreiben?!?
Irgendwie sollt ich sehen was in die Arrays geschrieben wird, wenn ein bestimmter Analogwert ansteht.
Ich weiß nicht mehr weiter...

Grüße High Light

P.s.: Hier noch das neue Programm:



$regfile = "m48def.dat"
$crystal = 16000000



'Servoeinstellungen
Config Servos = 1 , Servo1 = Portd.6 , Reload = 10
Servo(1) = 90

Config Portd.6 = Output

Enable Interrupts

Dim Servostellung1 As Byte
Servostellung1 = 90
Dim Servostellung2 As Byte
Servostellung2 = 110
Dim Servostellung3 As Byte
Servostellung3 = 130

Dim Xpos1 As Byte

'StatusLED
Config Pind.7 = Output
Statusled Alias Pind.7

'Signalausgabe

Config Pind.0 = Output
Signal1 Alias Pind.0

Config Pind.1 = Output
Signal2 Alias Pind.1

Config Pind.2 = Output
Signal3 Alias Pind.2

Config Pind.3 = Output
Signal4 Alias Pind.3

Signal1 = 1
Signal2 = 1
Signal3 = 1
Signal4 = 1

'Analogeinstellungen
Const Adc_multi = 0.0048828125 ' = 5.0 / 1024.0
Config Adc = Single , Prescaler = Auto , Reference = Avcc

Start Adc

Dim Messergebnis As Word
Dim Volt As Single

Messergebnis = Getadc(0)
Volt = Messergebnis * Adc_multi


'Arraykonfiguration
Dim Volt_list(3) As Byte

'Schrittvariablen
Dim T As Byte
Dim Z As Byte
Dim Z2 As Byte
Z = 0
T = 0

'Timer
Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1
Enable Timer1 'schalte den Timer1 ein
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Timer1 = 3035 'Timer1 soll schon von 3035 wegzählen


Do
'Statusled
Statusled = 1

'Wenn Arrayinhalt = 10 dann SignalX = 0
If Volt_list(1) = 10 Then
Signal3 = 0
Elseif Volt_list(1) = 100 Then
Signal3 = 1
End If

If Volt_list(2) = 10 Then
Signal2 = 0
Elseif Volt_list(2) = 100 Then
Signal2 = 1
End If

If Volt_list(3) = 10 Then
Signal1 = 0
Elseif Volt_list(3) = 100 Then
Signal1 = 1
End If

'Servo stellen und Analogwert auslesen und Array schreiben
If T = 1 Then
Select Case Z

'Servostellung 1
Case 2:

Servo(1) = Servostellung1
T = 0

If Volt <= 4.2 Then
Volt_list(1) = 100

Elseif Volt > 4.2 Then
Volt_list(1) = 10

End If


'Servostellung 2
Case 4:

Servo(1) = Servostellung2
T = 0

If Volt <= 4.2 Then
Volt_list(2) = 100

Elseif Volt > 4.2 Then
Volt_list(2) = 10

End If


'Servostellung 3
Case 6:

Servo(1) = Servostellung3
T = 0

If Volt <= 4.2 Then
Volt_list(3) = 100

Elseif Volt > 4.2 Then
Volt_list(3) = 10

End If

End Select
End If

Loop

End


Isr_von_timer1: 'ISR von Timer1
Timer1 = 3035

If Z >= 6 Then
Z = 0
End If

Z2 = Z
Z = Z2 + 1
T = 1

Return

High Light
23.12.2010, 17:02
Hallo zusammen,

Also am Programm liegt es meiner Vermutung nach nicht,
hab ein altes Programm umgeschrieben, mit dem ich schon mal einen
Analogwert eingelesen hab.
Und meine Feststellung ist, dass im Prgramm immer der höchste Wert steht.
Bedeutet dass er nicht mitbekommt, dass sich der Analogwert ändert.

Nach folgendem Beispiel hab ich es angeschlossen, nur habe ich vor dem
Messpunkt noch einen 12KOhm Widerstand drin, wenn ich den aber
brücke ändert sich auch nichts.

http://halvar.at/elektronik/kleiner_bascom_avr_kurs/adc_mit_getadc/


Jemand eine Vermutung oder Idee???

Gruß High Light

Rone
23.12.2010, 19:44
Hallo!

Du machst nur eine einzige ADC-Messung.

MfG

High Light
24.12.2010, 08:50
Ja klar, ich will ja nur an einem Punkt den Analogwert erfassen,
oder meinst du, dass ich ihn im Programm nur einmal erfasse?

Wenn ja wo und wie änder ich das?


Grüße High Light

Schöne Weihnachten euch allen und viele Geschenke!!!

Sauerbruch
24.12.2010, 09:04
Du hast den Befehl Messergebnis = Getadc(0) vor die Do-Loop-Schleife geschrieben, und deshalb wird er auch nur ein einziges mal ausgeführt! Auch wenn sich das Analogsignal ständig ändert, bleibt die Variable Messwert zunächst einmal unverändert - bis der Befehl Messwert = Getadc(0) das nächste mal ausgeführt wird. Von daher muss diese Zeile unbedingt in die Hauptschleife, wenn Du eine kontinuierliche Auswertung des Analogsignales haben möchtest!

High Light
24.12.2010, 11:59
Achso, macht Sinn! dankeschön!!!
Probier ich gleich aus!
Wie ist es mit der Auslastung für den Controller???
Bringt es viel Rechenaufwand mit sich, wenn er dies kontinuierlich macht? Wenn ja sollte man es dann immer aus- und einschalten?

Sauerbruch
25.12.2010, 09:56
Hallo High Light,

das reine Umwandeln von Analog- in Digitalsignale kostet den Controller keine Rechenleistung, weil es auf Hardware-Ebene geschieht - sozusagen im "Hintergrund". Wenn Du den AD-Converter kontinuierlich laufen lässt, bremst das das Programm definitiv nicht aus. Der Converter braucht halt ein wenig Strom, allerdings auch nicht so viel, dass davon gleich die Glühbirnen dunkler werden :-) Aber wenn es mal auf konsequente Reduktion der Stromaufnahme ankommt, kann es durchaus sinnvoll sein den ADC nur bei Bedarf zu aktivieren - in allen anderen Fällen kann man ihn guten Gewissens durchlaufen lassen.

Der Befehl Getadc(x), mit dem der letzte gemessene Wert des Converters ausgelesen wird, braucht laut Simulator 28 Taktzyklen. Bei 16 MHz also knapp 2 µS - das sollte keine kritische Verzögerung sein...

High Light
25.12.2010, 13:21
Alles klar, dankeschön für die klasse Unterstützung!!!

Als nächstes werd ich mich jetzt um das Thema I2C kümmern,
hatte schon einmal damit angefangen, aber nachdem ich es nicht
hinbekommen hatte, hatte ich es aufgegeben.
Schaun wir mal, wie weit ich dieses mal komme!!!
Auf jeden Fall muss es klappen.

Möchte, dass ich Werte vom Master an die Slaves sende, und wenn die
Slaves einen bestimmten Wert erhalten haben, sollen sie einen Ausgang
einschalten und mit einer Art "Ok" dem Master melden, dass sie die Daten
bekommen haben.
Anschließend soll dies dann noch so erweitert werden, dass der Master mit
einer Nachricht alle Slaves Stoppen kann.

Damit werde ich dann morgen mal anfangen, mal sehen wann ich dieses
Mal aufgebe...noch bin ich motiviert :-D

Habt ihr schon Erfahrung mit I2C???

Grüße High Light

High Light
28.12.2010, 18:00
So hab mich wieder in das Thema eingearbeitet!!!
Hatte dazu schon einmal ein Thema eröffnet,
in dem geht es jetzt auch weiter...

Wäre klasse wenn ihr dort Mal vorbei sehen könntet,
vielleicht könntet ihr mir weiter helfen!!!

Thema: I2C zwischen Atmegas 88


Grüße High Light

High Light
30.12.2010, 16:44
Hallo zusammen,

Hab den Bus zum Laufen gebracht und bin richtig happy!!!

Ich habe nun nach einigen Versuchen das erste richtige Programm
für den Master und den Slave geschrieben. Das Master-Programm
scheint soweit zustimmen, aber beim Slave läuft dauernd etwas schief
und zwar funktioniert das Case 20 nicht.
Wenn der Slave den Wert 20 erhält, soll er den Ablauf in Case 20
durcharbeiten. Jedoch fährt er alle 3 Servos auf eine undefinierte Positon
und mehr nicht.
Was stimmt mit Case 20 nicht?
Habt ihr eine Idee???

Slave-Code:


$regfile = "m88def.dat"
$crystal = 16000000


'I2C Konfiguration
Dim Twi_control As Byte ' Controlregister lokale kopie
Dim Twi_status As Byte
Dim Twi_data As Byte

Dim Neuesbyte As Byte ' Bytemerker

Declare Sub Twi_init_slave

Twi_data = 0
Call Twi_init_slave ' TWI aktivieren

'Servokonfiguration
Config Portb = Output

Config Servos = 3 , Servo1 = Portb.0 , Servo2 = Portb.1 , Servo3 = Portb.2 , Reload = 10

Enable Interrupts

Dim Xpos1 As Byte

'StatusLED
Config Portd.0 = Output
Statusled Alias Portd.0
Statusled = 1

'Variablen
Dim Freigabe As Byte
Freigabe = 0

' Hauptschleife
Do
' Merker zurücksetzen
Neuesbyte = 0

' schauen ob TWINT gesetzt ist
Twi_control = Twcr And &H80 ' Bit7 von Controlregister

If Twi_control = &H80 Then
Twi_status = Twsr And &HF8 ' Status

' wurde ein Byte geschickt
If Twi_status = &H80 Or Twi_status = &H88 Then
Twi_data = Twdr ' neue Daten merken
Neuesbyte = 1 ' merken das ein neues Byte da ist
End If

' TWINT muss immer gelöscht werden, damit es auf dem Bus weiter geht
Twcr = &B11000100 ' TWINT löschen, erzeugt ACK
End If


'Start
If Twi_data = 10 Then
Statusled = 0 ' StatusLED anschalten
Freigabe = 1
End If

'Stop
If Twi_data = 100 Then
Statusled = 1 ' StatusLED ausschalten
Freigabe = 0
End If

'Ablauf start
If Freigabe = 1 Then
Select Case Twi_data

Case 20:
Servo(1) = 100
Servo(2) = 105
Servo(3) = 80

For Xpos1 = 100 To 103
Servo(1) = Xpos1
Waitms 167
Next

For Xpos1 = 103 To 106
Servo(1) = Xpos1
Waitms 167

Next
Servo(1) = 98
Servo(2) = 140
Servo(3) = 50
Waitms 250

Servo(1) = 91
Servo(2) = 105
Servo(3) = 80
Waitms 250

For Xpos1 = 91 To 94
Servo(1) = Xpos1
Waitms 167
Next

For Xpos1 = 94 To 97
Servo(1) = Xpos1
Waitms 167
Next

For Xpos1 = 97 To 100
Servo(1) = Xpos1
Waitms 167
Next



End Select
End If

Loop

End


' Unterprogramme


' TWI als slave aktivieren
Sub Twi_init_slave
Twsr = 0 ' status und Prescaler auf 0
Twdr = &HFF ' default
Twar = &HCA ' Slaveadresse setzen
Twcr = &B01000100 ' TWI aktivieren, ACK einschalten

End Sub

Grüße High Light

High Light
31.12.2010, 09:03
Kann es sein, dass das Problem daher kommt, das in der Variable
Twi_data andere Werte als 20 stehen können, und er dann nicht die Case
findet, da sie nicht vorhanden ist?
Oder kommt es durch "Waitms" in Case 20???
Ich hab keine Ahnung!!!

Gruß High Light

PicNick
31.12.2010, 09:39
Meinst du
20 Hex ( &H20)
oder
20 dec ( &H14 )

High Light
31.12.2010, 11:20
Twi_data = 20

also müsste es ja 20 dec sein oder?

High Light
02.01.2011, 19:23
Kann mir jemand weiter helfen?

Gruß High Light

High Light
03.01.2011, 19:01
Hab es hin bekommen, hab für die Werte 10 und 100 auch noch jeweils
eine Case angelegt und es geht.

Nur läuft der Ablauf nicht wirklich stabil,
Gibt es eine andere Möglichkeit den Ablauf so zu gestalten?
Und zwar so, dass ich "Waitms" nicht mehr benutzen muss?

Gruß High Light