Herzlich Willkommen im einzigen (deutschsprachigem) Picaxe-Forum.

Der Ursprung dieses Forum reicht bis in das Jahr 2008 zurück

Foren Suche

  • Ja das sieht vom Code her doch schon mal sehr schön und übersichtlich aus.
    Dieses ALIAS finde ich sehr gut, dann kann man mit sinnigen Begriffen arbeiten und hat schneller ein Verständnis für den Code.


    In Sachen Display , ..... da gibts ja Millionen , funktionieren alle weltweit gleich !
    Hier wäre so 0-8-15 Display z.B. :
    https://www.ebay.de/itm/LCD-1602A-16x2-Z...4L1B53o3mkmSuNw

    Oder hier ein 20x4 :
    https://www.ebay.de/itm/Character-20x4-L...65319007289a3f8


    In Sachen Grafikdisplay würde ich erstmal abwarten , an welche Anwendung Du gedacht hast ?
    Auch da gibts viele die Sinn oder Unsinn machen, halt je nach Projekt.

  • Ich hab jetzt auch mal ein wenig gespielt ....


    Bei meinem Atmega8 ergab sich folgendes :


    - Atmega8 mit 5V Spannung , 8 Mhz
    - Servo mit 6V Spannung
    - Fahrbereich 180°
    - Werte von 25 - 150

  • Hey , jeder is 'n andere Jeck


    Das Beispiel sollte lediglich untermalen was ich als Code so verzapft habe

    Kannst auch immer und gerne sagen : "Hey , da hasse aber so eine kagge produziert .."
    Wenn mir dann auch das Gegenteil aufzeigen kannst :-)

    Wie schon erwähnt , die CHM (Hilfe) Datei würde Dir enorm helfen denk ich.
    Auch ich muss ab und an immer wieder dort reinschaun, weil ....... ich muss nicht alles wissen , aber wissen wo ich nachschaun muß

  • Auszug aus der Hilfe Datei



    Configures how much servo’s will be controlled.



    Syntax

    CONFIG SERVOS = X , ServoN = Portb.0 , Reload = rl [, INTERVAL=t]
    CONFIG SERVOS = X , ServoN = Portb.0 , MODE=mode , PRESCALE=pre



    Remarks
    Servo’s need a variable pulse in order to operate. The CONFIG SERVOS directive will set up a byte array with the servo pulse width values and will initialize an ISR that uses TIMER0.



    X
    The number of servo’s you want to control. Each used servo will use one byte of SRAM.

    servoN
    The port pin the servo is attached too. N represents a value between 1 and 10.

    When you specify that you will use multiple servo's you need to specify a pin for each servo. Like : config servos=3, servo1=portb.0, servo2=portb.2, servo3=portC.4

    reload
    The reload value for the ISR in uS. This is the overflow rate of the timer.

    So when 100 is used, it means that each 100 uS an interrupt will occur to update the servo variables.

    Interval
    The update interval. Using the interval option will result in using alternative servo code optimized for servos.

    Mode
    The normal default modes use software PWM with a relatively high frequency. This will give a big processor load since the timer ISR is executed many times.

    It allows to create create precise pulses in small steps. But when controlling a simple RC servo, it is also possible to use a lower refresh rate which will result in lower processor load.

    MODE=SERVO will work for normal AVR and XMEGA. You do not need to specify the interval or reload value.

    Prescale
    The prescale value is calculated so that the 8 bit timer interrupt is executed every 2 ms. Inside the interrupt, the servo pin is made high for the value of the servo() array. Then the next time inside the ISR, the pin is set low for the reset of the time. It depends on the processor frequency if you get a good range. In the report you can find the used prescale value as a constant named _SERVO_PRESCALER. When you do not get a full servo swing, you might want to try a higher prescale value. The prescale parameter overrides the automatic calculation.

    Timer
    This is for XMEGA only. Specify the name of the timer that will be used in interrupt mode.






    PWM MODE
    When you use for example :
    Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10
    The internal ISR will execute every 10 uS.



    An arrays named SERVO() will be created and it can hold 2 bytes : servo(1) and servo(2).
    By setting the value of the servo() array you control how long the positive pulse will last. After it has reached this value it will be reset to 0.
    The reload value should be set to 10. After 20 mS, a new pulse will be generated.
    You can use other reload values but it will also mean that the repeat value will change.

    The PORT pins specified must be set to work as an output pin by the user.

    CONFIG PINB.0 = OUTPUT

    Will set a pin to output mode.


    The CONFIG SERVOS only works with servo's that rotate 180 degrees. These are the servo's found in RC models.
    There are also continuous rotation servos which work different. The servo code will NOT work on these servos.



    Alternative Servocode

    When using the INTERVAL option, you can use alternative code which is optimized for servo's.(this is however not the MODE=SERVO)
    You should use a RELOAD value of 100 in that case and an interval of 100 should be used for best results.
    Using a reload of 100 uS will give more time to the main application. This does give lower resolution but this is not a problem for most model servos. With an interval of 100, the refresh will be done in 100x100 us which results in 10 mS.

    The following test code was used:


    Config Servos = 2 , Servo1 = Portd.7 , Servo2 = Portb.1 , Reload = 100 , Interval = 100
    Servo(1) = 10
    Servo(2) = 5
    Enable Interrupts

    Do

    For J = 8 To 16

    Servo(1) = J

    Waitms 5000 ' some time to check if the servo is stable

    Next

    Waitms 5000

    Loop





    SERVO mode

    The MODE=SERVO can be used for normal AVR and XMEGA. It results in a lower processor load.

    Resources used

    TIMER0 is used to create the ISR. Xmega will use TCxx.

    NOTE

    The servo() value is not absolute. It will depend on the processor clock. This means that these values might need an adjustment when you alter the $crystal value.




    Example PWM mode

    '-----------------------------------------------------------------------------------------

    'name : servos.bas

    'copyright : (c) 1995-2016, MCS Electronics

    'purpose : demonstrates the SERVO option

    'micro : 90S2313

    'suited for demo : yes

    'commercial addon needed : no

    '-----------------------------------------------------------------------------------------



    $regfile = "2313def.dat" ' specify the used micro
    $crystal = 4000000 ' used crystal frequency
    $baud = 19200 ' use baud rate
    $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


    'Servo's need a pulse in order to operate
    'with the config statement CONFIG SERVOS we can specify how many servo's we
    'will use and which port pins are used
    'A maximum of 14 servos might be used
    'The SERVO statements use one byte for an interrupt counter and the TIMER0
    'This means that you can not use TIMER0 anymore
    'The reload value specifies the interval of the timer in uS

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



    Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
    'as an option you can use TIMER1
    'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10 , Timer = Timer1

    'we use 2 servos with 10 uS resolution(steps)
    'we must configure the port pins used to act as output

    Config Portb = Output

    'finally we must turn on the global interrupt
    Enable Interrupts



    'the servo() array is created automatic. You can used it to set the
    'time the servo must be on
    Servo(1) = 10 '10 times 10 = 100 uS on
    'Servo(2) = 20 '20 times 10 = 200 uS on

    Do
    Loop


    Dim I As Byte
    Do

    For I = 0 To 100

    Servo(1) = I

    Waitms 1000

    Next



    For I = 100 To 0 Step -1

    ' Servo(1) = I

    Waitms 1000

    Next

    Loop

    End





    Example SERVO mode

    '-----------------------------------------------------------------------------------
    ' (c) 1995-2016, MCS Electronics
    ' servos-timer0.bas
    '-----------------------------------------------------------------------------------
    $regfile = "m88def.dat"
    $crystal = 8000000
    $hwstack = 64
    $swstack = 64
    $framesize = 64



    Config Com1 = 19200 , Parity = None , Stopbits = 1 , Databits = 8
    Print "Servo test"

    Config Servos = 2 , Mode = Servo , Servo1 = Portb.0 , Servo2 = Portb.1
    'Config Servos = 2 , Mode = Servo , Servo1 = Portb.0 , Servo2 = Portb.1 , Prescale= 256

    ' you need to chose SERVO mode for lowest system resources
    Enable Interrupts ' you must enable interrupts since timer 0 is used in interrupt mode


    Dim Key As Byte
    'notice that servo() array is a byte array, which is created automatic

    Do
    Key = Inkey() ' get data from serial port
    If Key = "l" Then 'left
    Servo(1) = 100
    Servo(2) = 100
    Elseif Key = "m" Then ' middle
    Servo(1) = 170
    Servo(2) = 170
    Elseif Key = "r" Then ' right
    Servo(1) = 255
    Servo(2) = 255
    Elseif Key <> 0 Then ' enter user value
    Input "Servo1 " , Servo(1)
    Servo(2) = Servo(1)
    End If
    Loop

  • Zitat

    Ein einfaches "Hey Naubaddi der Mega... hat andere Werte für die Pulslänge und interessiert sich nicht für die richtigen Pulslängen" hätte gereicht, macht nix, habe es mit dem RC-Kram und dem Markieren des Steuerkreuzes selber raus gefunden.



    sorry ... beherrsche leider nur 5 Programmiersprachen , muß dann doch mal das ein oder andere kurz ausprobieren um hier keinen Müll zu erzählen
    Ich besitze Bascom 2.0.8.5 , nach dem letzten Update haben sich einige Syntax geändert !
    Ich eier nicht jeden Tag mit Servo's rum :-(

    Ich weiß auch das bei vielen anderen die Werte von 75 - 225 gehen , aber bevor ich unnötige "Streitgespräche" anzettel das die Werte anders sind ,
    zeige ich es kurz an einem praktischen Beispiel ;-)

    Leider entstehen viele "Verständnissproblem" weil du die CHM ( Hilfedatei ) von Bascom nicht in Linux lesen kannst.
    Da sind viele Erklärungen und Beispiele die offene Frage oftmals im Vorfeld beantworten.
    ( Ich hatte den Link zur chm als Textdatei ja schon gegeben gehabt )

  • Mußte ich doch tatsächlich wieder in meine Katakomben und in alten Sachen wühlen gehen .......

    Hier jetzt meine Version :


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     

    $regfile = "m8def.dat"
    $crystal = 8000000
    $hwstack = 40
    $swstack = 40
    $framesize = 40
     

    Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
     
    config portb.0 = output
    config portc.1 = output
    config portc.2 = output
    config portc.3 = output
    config portc.4 = output
    config portc.5 = output
     

    Led1 alias portc.1
    Led2 alias Portc.2
    Led3 alias Portc.3
    Led4 alias Portc.4
    Led5 alias Portc.5
     

    Enable Interrupts
     
    Servo(1) = 150
    waitms 1000
     
    main:
     
    Led5 = 0
    Led1 = 1
    Servo(1) = 150
    waitms 1000
     
    Led1 = 0
    Led2 = 1
    Servo(1) = 130
    waitms 1000
     
    Led2 = 0
    Led3 = 1
    Servo(1) = 110
    waitms 1000
     
    Led3 = 0
    Led4 = 1
    Servo(1) = 90
    waitms 1000
     
    Led4 = 0
    Led5 = 1
    Servo(1) = 70
    waitms 1000
     
    goto main
    End
     

     




  • Ich hätte da verschieden Ansätze ...


    1. Man sollte eigentlich Spannungsquelle Servo und Spannungsquelle µC getrennt halten.
    So ein Servo kann schnell bis zu 4A mal eben ziehen und dann ist der Strom im Stromkreis sehr hoch.

    2. Was ist denn das für eine Platinchen für den Servo ?
    Man benötigt doch nur Plus / Minus / und 330 Ohm vom µC zum Servo Data ?

    3. Ich weiß nicht recht , ob da irgendwie , irgendwo , ne Art ...... "Fehler" auf meinem Board sich eingeschlichen hat ?
    Ich hab manchmal auch so meine "Probleme" mit PortC.0
    Probier doch mal Portc.3 oder gänzlich PortD
    PortD.5

  • Nr. 5 lebt ? Ja das hört sich nach nem schönem Projekt an.

    Hab ja auch mal vor Jahren diverse Kettenfahrzeuge und normal Fahrzeuge , 6 beinige Spinne per Fernbedineung realisiert.


    Also was ich mit Bluetooth meine is , lediglich die Verbindung is Bluetooth.
    Was wann wo wie an Daten oder was auch immer kommt , geht oder soll ,das liegt dann völlig an Dir.
    Da ist erst rein nix , garnix , nur die Verbindung :-)


    Du mußt da mal von Deinem einseitigem Denken weg kommen, wir arbeiten hier mit Mikrocontroller.
    Da gibt es nichts vorgefertigtes oder nutzen irgendetwas vorgefertigtes.
    Stichwort : BTM222

    Ich seh schon , da hab ich nen riiiiiiiesen großes "WEISSES Blatt Papier" vor mir

  • Wäre mal schön jemanden zu treffen der schon so 2-4 Jahre weiter ist und mir vielleicht bisken Innovationen zeigen kann

  • Kein Bluetooth ?
    Mh ... schade , ne RC Fernbedienung über 1km find ich eigentlich ganz lustig , na gut.

    SPI ?
    Alle modernen Sachen die Du noch laaaaange nicht kennst , laufen per SPI ;-)


    WLAN ?
    Nun ja, z.B. alles auf der Welt : steuern , regeln , schalten , sichern , bewegen , überwachen ..........


    Display ?
    Ja gut , fang wir mal mit popeligstem auf der Welt an.
    Also ich möchte darauf nicht mehr verzichten.
    Wenn ich Projekte mache , also , richtige Projekte ...wo man den Datenfluss oder Aktionen kontrollieren muss , kann man das super auf nem einfachen 16x2 oder 20x4 anzeigen lassen.
    Jedesmal dieses umständliche aufwendige serielle schicken an den PC ..... neeee , das war vor 30 Jahren .
    Ich sag mal so , selbst für den Pupskram mit dem Servosignal , da isses doch super wenn man mitlesen kann was pulsin Live ausliest.
    Davon ab , gibt ja nicht nur die einfachen alphanumerischen Displays dann noch das simple TM1637 .
    Oder eine 8x8 Matrix bis hin zu einer 16x8 Matrix.
    Oder wenn man nen Frequenzmesser machen will.Jetzt nicht per Picaxe 2Khz , also richtig mein ich , dann den 2313 mit Display.
    Ach Du , ..... gibt sooo viel Sachen die man machen kann ;-)

    Aber das sind alles mehr oder weniger Sachen , da fängt man mit nem Mega8 an .

  • Ja , ich wollt schon fragen , was kommt als nächstes ??

    Is ja schön endlich mal einen mehr im "AVR-Boot" zu haben ...... aber dann fiel mir ja leider ein ,
    daste überwiegend nur mit deinen RC Modellen und Servo und so unterwegs bist .

    Ich hatte son bissel gehofft , das man wieder mehr in Sachen SPI , WLAN, Bluetooth ,Grafik , Display machen tut / kann .
    Naja, .... dann muss ich wohl noch nen paar Monate warten

    Das ist wohl das Schicksal wenn man quasi alles was es auf der Welt gibt , schon mit nem AVR durch hat.

  • Is ja auch ne nette Idee.
    man is ja flexibel , nix muss , alles kann ;-)

  • Ja mein Gott , dann verbindest die Doppelstifte just zu einem Lötpunkt :-(
    Hab ja nur 2 Stifte genommen damit es leichter zu löten ist ;-)
    Hab ich halt die Verbindung vergessen , naja, ... auch der Meister is mal fehlbar :-) :-)

  • Also Deine Zeichnung ist mir etwas zu abstrakt
    Warum setzt Du Jumper an Tastern ?


    Meine Taster sind so wie im Schaltplan , unabhängig , plusorientiert ... siehe auch Layout !
    Normal habe ich , wenn Platz is , noch diverse Potis (siehe Mega8 Board ) aber alle frei und unabhängig , für jeden Pin nutzbar.

  • Vielleicht verstehst jetzt den Aufbau des Boards besser ;-)

  • ich hab mal ein wenig ge-googelt ...

    hab da einen Beitrag gefunden , wo behauptet wird , das bei höheren Spannungen Interferenzen auftreten die bei geringerer Spannung nicht zum Tragen kommen ...?
    Der Eine hat einmal den Chip in den Ur-zustand versetzt und dann neu programmiert ...
    Der andere meint ein 100nF Kerko würde abhilfe schaffen ...?


    https://www.mikrocontroller.net/topic/332835

    Mh ... wenn das an dem so ist , müßte ich das wissen um das für zukünftige Board einzuplanen.

  • Ich hab mir doch jetzt auch mal die Mühe gemacht und ein Labornetzteil rausgekramt .....

    Vorab :
    Ich bin selber jetzt etwas irretiert.


    Schliesse ich den ISP an und erhalte darüber Spannung - läufts.
    Is ja nichts anderes als ungesiebte 5,0V vom USB.

    Schliesse ich das Netzteil an , beginne mit 4,8V - nix !
    5,0 V - nix !
    5,3 V - nix !
    5,5 V - nix !

    mh ........

    Nehm den Pluspol vom Netzteil , schliesse den an den Plus vom ISP ... läuft ?!

    Aber nur bis 5,2V

    Ich arbeite ja 99,9 % nur mit dem Atmega8 , so das mir das nie aufgefallen ist , auch nutze ich nur eine 5V Schaltnetzteil.
    Aber was ist denn das für eine Logik ?

    Ich kann auch am Layout keinerlei Fehler entdecken ....

  • interessante Verschaltung die Du da gemacht hast - nicht wie geplant - aber interessant ;-)




  • Wie Du schon sagst , bei nem Akku mit 4,8V und ner Toleranz von 10% (5,3xV) sollte es noch kein Problem geben.
    Ich denke da haben die Hersteller schon gewisse Toleranzen mit eingeplant und berücksichtigt das nen Akku auch genommen werden wird.
    Ich dachte eher an 6V und mehr ... das geht natürlich nicht.

    Auch ich habe nicht selten 4 Stk 1,2V Akku genutzt und nüscht is passiert - also nüscht im Sinne von kaputt gegangen

    Ich würd Dir ja gern helfen und sagen wo dran es liegt , aber aus 300km Entfernung kurz rüber gucken was Du da vor Dir hast ..... bisken problematisch.

  • Zitat
    Ab 5V funktioniert der ATtiny44 nicht mehr, da ich normalerweise mit 4,8V arbeite ist es mir vorher nicht aufgefallen.




    Was heißt ab 5V ??
    Die Mikrocontroller arbeiten alle auf TTL Basis , d.h. 5V + - 10% = 5,5V !
    Son Blick ins Datenblatt kann meist nicht schaden ;-)
    Man soll die ja nicht braten.(Wobei , ne Picaxe hab ich schon mal 12V angetan , geht eh nie genau ;-) )

    Also , dauerhaft über 5,5V und die Controller sind flöten.
    Drunter is egal .

Inhalte des Mitglieds BoomBoomMagic
Beiträge: 541
Ort: Bielefeld
Geschlecht: männlich
Picaxe Editor 5.5.5 Download
Update auf Picaxe Editor 5.5.6 Download
Picaxe Editor 6.x.x.x Download
Manual1.pdf        -      Grundwissen Download
Manual2.pdf        -      Befehle Download
Manual3.pdf        -      Beispiele Download


Press [Backspace] for back to Menu


Counter
Xobor Forum Software ©Xobor.de | Forum erstellen
Datenschutz