Hallo
Ich will gewisse Analogwerte im uC wandeln und es an einem port
ausgeben. Ich habe einen Atmega16 im TQFP gehäuse.
könnt ihr mal drüberschauen?
$regfile = "m16def.dat"
$crystal = 1000000
$baud = 9600
$hwstack = 32 ' default
use 32 for the hardware stack
$swstack = 10 'default use
10 for the SW stack
$framesize = 40 'default use
40 for the frame space
Config Porta = Input
Config Portb = Output
Config Adc = Single , Prescaler = Auto
Start Adc
Print "START CONVERTER"
Dim W As Integer
Do
W = Getadc(0)
Select Case W
Case Is >= 205 : Portb = &B00000001
Case Is >= 232 : Portb = &B00000010
Case Is >= 259 : Portb = &B00000011
Case Is >= 286 : Portb = &B00000100
Case Is >= 313 : Portb = &B00000101
Case Is >= 340 : Portb = &B00000110
Case Is >= 367 : Portb = &B00000111
Case Is >= 394 : Portb = &B00001000
Case Is >= 421 : Portb = &B00001001
Case Is >= 448 : Portb = &B00001010
Case Is >= 475 : Portb = &B00001011
Case Is >= 502 : Portb = &B00001100
Case Is >= 529 : Portb = &B00001101
Case Is >= 556 : Portb = &B00001110
Case Is >= 583 : Portb = &B00001111
Case Is >= 610 : Portb = &B00011111
Case Is >= 637 : Portb = &B00101111
Case Is >= 664 : Portb = &B00111111
Case Is >= 691 : Portb = &B01001111
Case Is >= 718 : Portb = &B01011111
Case Is >= 745 : Portb = &B01101111
Case Is >= 772 : Portb = &B01111111
Case Is >= 799 : Portb = &B10001111
Case Is >= 826 : Portb = &B10011111
Case Is >= 853 : Portb = &B10101111
Case Is >= 880 : Portb = &B10111111
Case Is >= 907 : Portb = &B11001111
Case Is >= 934 : Portb = &B11011111
Case Is >= 961 : Portb = &B11101111
Case Is >= 988 : Portb = &B11111111
End Select
Print W
Loop
End
Config Porta = Input Config Portb = Output ...schau bei Roboternetz.de Bascom hat eine eigenartige Input/Output - regelung. Deine stimmt nicht.
Ist es bei bascom zulässig in den case Labels eine Bedingung anzugeben? Kann auf die Schnelle mit Google nichts darüber finden.
hi, in deiner select case wird es auch keine Ausgangssignale geben, wenn W unter 205 ist, dafür gibt es keine Anweisung (könnte ja heissen: case is < 205). Für alle Werte, die über 205 liegen, ist in jedem Fall die erste Bedingung (case is >= 205) gültig. Bei allen Werten darüber (z.B. 610) kann die entsprechende Anweisung nicht ausgeführt werden, weil die erste gültige ja schon mit der ersten (>= 205) ausgeführt wird. Die case Verzweigung ist für den angedachten Zweck (Bereich1: 205-232, Bereich2: 232-259, etc) richtig gecodet, die Zuweisungen müssen aber absteigend erfolgen, so dass die erste Bedingung dem höchsten Bereich entspricht. select case W case is >= 980 : Anweisung ' Wertebereich 980 - 1024 case is >= 950 : ' Wertebereich 950 - 979 . . end select So herum tät ein Schuh draus werden. Gilt übrigens nicht nur für Bascom, das Problem einer unlogischen Definition ergäbe in jeder anderen Sprache dasselbe Resultat. Grüssens, harry
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.