Ich hab das mit Cut'n'Paste in den Bascom geschoben, der bringt keine Fehlermeldung ?
Hallo,
ich hab gerade zwei Servos bekommen und möchte einen kleinen Roboterarm basteln. ich hab jetzt ein Programm geschrieben mit dem ich die Position der Arme mit dem Poti über den analogeingang des atmega8 steuern kann.
leider bringt mir Bascom eine Fehlermeldung. weiss jemand eine lösung???
Wenn ich die hälfte des Programms des zweiten Servos lösche funktionierts.
Gibts da ne andere möglichkeit sowas zu programmieren
AD1 erster Servo, AD zweiter Servo
Unterteilung der 180° in ca.5°
schon mal dankeCode:$regfile "m8def.dat" $crystal = 1000000 Dim Ad As Word Dim Ad1 As Word Config Portb = Output Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc Do Ad1 = Getadc(1) If Ad1 <= 32 Then Portb.1 = 1 Waitus 600 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 32 And Ad1 <= 64 Then PortB.1 = 1 Waitus 656 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 64 And Ad1 <= 96 Then PortB.1 = 1 Waitus 712 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 96 And Ad1 <= 128 Then PortB.1 = 1 Waitus 768 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 128 And Ad1 <= 160 Then PortB.1 = 1 Waitus 824 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 160 And Ad1 <= 192 Then PortB.1 = 1 Waitus 880 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 192 And Ad1 <= 224 Then PortB.1 = 1 Waitus 936 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 224 And Ad1 <= 256 Then PortB.1 = 1 Waitus 992 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 256 And Ad1 <= 288 Then PortB.1 = 1 Waitus 1048 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 288 And Ad1 <= 320 Then PortB.1 = 1 Waitus 1104 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 320 And Ad1 <= 352 Then PortB.1 = 1 Waitus 1160 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 352 And Ad1 <= 384 Then PortB.1 = 1 Waitus 1216 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 384 And Ad1 <= 416 Then PortB.1 = 1 Waitus 1272 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 416 And Ad1 <= 448 Then PortB.1 = 1 Waitus 1328 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 448 And Ad1 <= 480 Then PortB.1 = 1 Waitus 1384 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 480 And Ad1 <= 512 Then PortB.1 = 1 Waitus 1440 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 512 And Ad1 <= 544 Then PortB.1 = 1 Waitus 1496 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 544 And Ad1 <= 576 Then PortB.1 = 1 Waitus 1552 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 576 And Ad1 <= 608 Then PortB.1 = 1 Waitus 1608 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 608 And Ad1 <= 640 Then PortB.1 = 1 Waitus 1664 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 640 And Ad1 <= 672 Then PortB.1 = 1 Waitus 1720 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 672 And Ad1 <= 704 Then PortB.1 = 1 Waitus 1776 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 704 And Ad1 <= 736 Then PortB.1 = 1 Waitus 1832 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 736 And Ad1 <= 768 Then PortB.1 = 1 Waitus 1888 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 768 And Ad1 <= 800 Then PortB.1 = 1 Waitus 1944 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 800 And Ad1 <= 832 Then PortB.1 = 1 Waitus 2000 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 832 And Ad1 <= 864 Then PortB.1 = 1 Waitus 2056 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 864 And Ad1 <= 896 Then PortB.1 = 1 Waitus 2168 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 896 And Ad1 <= 928 Then PortB.1 = 1 Waitus 2224 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 928 And Ad1 <= 960 Then PortB.1 = 1 Waitus 2280 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 960 And Ad1 <= 992 Then PortB.1 = 1 Waitus 2336 PortB.1 = 0 Waitus 20000 Elseif Ad1 > 992 And Ad1 <= 1024 Then PortB.1 = 1 Waitus 2392 PortB.1 = 0 Waitus 20000 End If Ad = Getadc(0) If Ad <= 32 Then Portb.2 = 1 Waitus 600 Portb.2 = 0 Waitus 20000 Elseif Ad > 32 And Ad <= 64 Then Portb.2 = 1 Waitus 656 Portb.2 = 0 Waitus 20000 Elseif Ad > 64 And Ad <= 96 Then Portb.2 = 1 Waitus 712 Portb.2 = 0 Waitus 20000 Elseif Ad > 96 And Ad <= 128 Then Portb.2 = 1 Waitus 768 Portb.2 = 0 Waitus 20000 Elseif Ad > 128 And Ad <= 160 Then Portb.2 = 1 Waitus 824 Portb.2 = 0 Waitus 20000 Elseif Ad > 160 And Ad <= 192 Then Portb.2 = 1 Waitus 880 Portb.2 = 0 Waitus 20000 Elseif Ad > 192 And Ad <= 224 Then Portb.2 = 1 Waitus 936 Portb.2 = 0 Waitus 20000 Elseif Ad > 224 And Ad <= 256 Then Portb.2 = 1 Waitus 992 Portb.2 = 0 Waitus 20000 Elseif Ad > 256 And Ad <= 288 Then Portb.2 = 1 Waitus 1048 Portb.2 = 0 Waitus 20000 Elseif Ad > 288 And Ad <= 320 Then Portb.2 = 1 Waitus 1104 Portb.2 = 0 Waitus 20000 Elseif Ad > 320 And Ad <= 352 Then Portb.2 = 1 Waitus 1160 Portb.2 = 0 Waitus 20000 Elseif Ad > 352 And Ad <= 384 Then Portb.2 = 1 Waitus 1216 Portb.2 = 0 Waitus 20000 Elseif Ad > 384 And Ad <= 416 Then Portb.2 = 1 Waitus 1272 Portb.2 = 0 Waitus 20000 Elseif Ad > 416 And Ad <= 448 Then Portb.2 = 1 Waitus 1328 Portb.2 = 0 Waitus 20000 Elseif Ad > 448 And Ad <= 480 Then Portb.2 = 1 Waitus 1384 Portb.2 = 0 Waitus 20000 Elseif Ad > 480 And Ad <= 512 Then Portb.2 = 1 Waitus 1440 Portb.2 = 0 Waitus 20000 Elseif Ad > 512 And Ad <= 544 Then Portb.2 = 1 Waitus 1496 Portb.2 = 0 Waitus 20000 Elseif Ad > 544 And Ad <= 576 Then Portb.2 = 1 Waitus 1552 Portb.2 = 0 Waitus 20000 Elseif Ad > 576 And Ad <= 608 Then Portb.2 = 1 Waitus 1608 Portb.2 = 0 Waitus 20000 Elseif Ad > 608 And Ad <= 640 Then Portb.2 = 1 Waitus 1664 Portb.2 = 0 Waitus 20000 Elseif Ad > 640 And Ad <= 672 Then Portb.2 = 1 Waitus 1720 Portb.2 = 0 Waitus 20000 Elseif Ad > 672 And Ad <= 704 Then Portb.2 = 1 Waitus 1776 Portb.2 = 0 Waitus 20000 Elseif Ad > 704 And Ad <= 736 Then Portb.2 = 1 Waitus 1832 Portb.2 = 0 Waitus 20000 Elseif Ad > 736 And Ad <= 768 Then Portb.2 = 1 Waitus 1888 Portb.2 = 0 Waitus 20000 Elseif Ad > 768 And Ad <= 800 Then Portb.2 = 1 Waitus 1944 Portb.2 = 0 Waitus 20000 Elseif Ad > 800 And Ad <= 832 Then Portb.2 = 1 Waitus 2000 Portb.2 = 0 Waitus 20000 Elseif Ad > 832 And Ad <= 864 Then Portb.2 = 1 Waitus 2056 Portb.2 = 0 Waitus 20000 Elseif Ad > 864 And Ad <= 896 Then Portb.2 = 1 Waitus 2168 Portb.2 = 0 Waitus 20000 Elseif Ad > 896 And Ad <= 928 Then Portb.2 = 1 Waitus 2224 Portb.2 = 0 Waitus 20000 Elseif Ad > 928 And Ad <= 960 Then Portb.2 = 1 Waitus 2280 Portb.2 = 0 Waitus 20000 Elseif Ad > 960 And Ad <= 992 Then Portb.2 = 1 Waitus 2336 Portb.2 = 0 Waitus 20000 Elseif Ad > 992 And Ad <= 1024 Then Portb.2 = 1 Waitus 2392 Portb.2 = 0 Waitus 20000 End If Loop
mfg
Ich hab das mit Cut'n'Paste in den Bascom geschoben, der bringt keine Fehlermeldung ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Sehr elegant für solche "Serien-Bedingungsabfragen" ist der befehl "Select Case" (wie alle anderen Befehle auch gut in der Bascom-Hilfe beschrieben).Gibts da ne andere möglichkeit sowas zu programmieren
Am besten kann man Servos aber mit PWM ansteuern - supergenau und extrem codesparend. Die Beschäftigung damit lohnt sich für jeden Servo-Verwender: https://www.roboternetz.de/wissen/in...Bascom_und_PWM
Aber welche Fehlermeldung bringt Bascom denn bei Dir überhaupt?
habs auch gerade nochmal kopiert und da bringt mir Bascom
folgende Fehlermeldung
ERROR: 999 line: 340 DEMO/BETA only supports 4096 bytes of code
kann es sein das ich nur eine demoversion habe???
Ist die Vollversion umsonst?
kannst du mir ein kurzes Beispiel geben wie ich das mit slect case schreiben kann?
danke
mfg
Fehlermeldung: alles klar, logisch. Vollversion kostet ~80 € (weiss nicht genau)
versuch mal, ob das noch geht.Code:Dim Us As Word Do Ad1 = Getadc(1) Select Case Ad1 Case Is < 32 : Us = 600 Case Is < 64 : Us = 656 Case Is < 96 : Us = 712 Case Is < 128 : Us = 768 ..... End Select Portb.1 = 1 Waitus Us Portb.1 = 0 Waitus 20000
ausserdem glaub' ich, daß man die Zeit auch errechnen könnte
us = ad1 * faktor + basis
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hmmm... in der Bascom-Hilfe steht, dass waitus nicht mit variablen geht. Kann ich aus eigener Erfahrung auch bestätigen.
Außerdem würde ich zu bedenken geben, dass wenn Ad1 z.B. 50 sei, alle Bedingungen (< 64, < 96, < 128 etc.) erfüllt sind.
Vielleicht geht´s ja so:
(auch wenn ich noch ein ziemlich kleines Bascom-Licht bin...Code:Ad1 = Getadc(1) Portb.1=1 Select case Ad1 Case is < 32: Waitus 600 Case 32 to 63: Waitus 656 Case 64 to 95: Waitus 712 ... Case is > 992: Waitus 2392 End select Portb.1=0 Waitms 20)
Gruß,
Daniel
erstmal danke für die antworten.
also ich habs auch mit den codes probiert jedoch ohne erfolg.
jetzt wollt ich fragen ob es eine günstigere alternative zu Bascom gibt.
Ist es vielleicht besser wenn ich das in c++ schreib und dann mit programmers notepad compiliere.
wenn ja kann mir jemand einen link geben wo ich das lernen kann?
mfg
Lesezeichen