- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 8 von 8

Thema: Anfängerprogramm - Tipps für Programmierung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.11.2005
    Ort
    Gleisdorf
    Alter
    59
    Beiträge
    7

    Anfängerprogramm - Tipps für Programmierung

    Anzeige

    Powerstation Test
    Hallo ihr

    Habe mir jetzt Bascom-Demo runtergeladen, ISP-Adapter gebaut und am
    Exp.-Board einen AT90S2313 aufgebaut.
    Habe vorher noch nie mit uC-Programmierung und Basic zutun.
    Nach ein paar tests mit Led an- aus bzw. Taster ein -aus ,usw,
    habe ich folgendes programm geschrieben,
    Code:
    $regfile = "2313def.dat"
    $crystal = 4000000
    
    
    Config Portb.3 = Output
    Enable Interrupts
    Config Servos = 1 , Servo1 = Portb.3 , Reload = 10
    Dim A As Byte
    A = 75
    Servo(1) = A
    
    Plus Alias Pind.4
    Leer Alias Pind.5
    Minus Alias Pind.6
    
    Do
    
    
    If Plus = 0 Then
    Waitms 25
    Incr A
    Servo(1) = A
    If A = 110 Then
    A = 109
    End If
    End If
    
    
    If Leer = 0 Then
    Waitms 25
    A = 75
    Servo(1) = A
    End If
    
    
    If Minus = 0 Then
    Waitms 25
    Decr A
    Servo(1) = A
    If A = 40 Then
    A = 41
    End If
    End If
    
    Loop
    End
    Es funktioniert soweit , aber gibt es eine andere möglichkeit den Endausschlag zu begrenzen als die ,die ich programmiert habe ?
    Ich verwende eine If ..then schleife , für den max. und min. Wert.
    Sprich- ich sage zb. max. Wert ist max. Wert - 1.
    wenn ich auf der Taste bleibe zählte der uC sich zu tote ,
    kann man das anders lösen?

    Komme ansonst mit Bascom gut zurecht, muss aber mein Englisch und Techn. Begriffe auffrischen.
    Danke im vorraus Richard

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    das a=109 kannste
    durch

    decr a

    ersetzen

    If A = 40 Then
    A = 41
    End If

    durch

    If A = 40 Then
    incr a
    End If
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.02.2005
    Beiträge
    175
    Hallo Richard,

    versuchs doch mal mit

    If Plus=0 and A<110 then
    Waitms 25
    incr A
    Servo(1) = A
    end if

    Und schau Dir doch mal den Case-Befehl an, damit kann man auch so manche IF-Then-Schleife umgehen...

    Viele Grüße

    Torsten

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    stimmt, den case hab ich glatt übersehen,
    der kann nochmal was bringen

    der while ist auch ganz nett ... sauber .... besser so
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    wenn ich auf der Taste bleibe zählte der uC sich zu tote ,
    kann man das anders lösen?
    Z.B. die Zeit erhöhen. Wie soll es denn am Ende aussehen?
    Es gibt sicherlich noch eine andere Lösung, aber die sollte dir auch gefallen.

    If A = 110 Then
    A = 109
    End If
    Wenn du If A = 110 Then A = 109 schreibst, kannst du dir ein End If sparen. Somit wird es evtl übersichtlicher. Aber das ist auch immer Geschmackssache.

    Servo(1) = A
    Könnte auch vor dem Loop stehen. In der Schleife wird ja nicht weiter gemacht als zu prüfen, welcher Taster gedrückt wurde und den Servo zu stellen.
    Wenn das stellen am Ende der Schleife steht, sparst du dir etwas Code.
    Genau wie das Waitms. Pro Durchlauf kann ja nur ein Taster gedrückt werden.


    Do

    If Plus = 0 Then Incr A 'erst alle Möglichkeiten abfragen
    If Leer = 0 Then A = 75
    If Minus = 0 Then Decr A

    If A = 110 Then A = 109 'dann Werte begrenzen
    If A = 40 Then A = 41

    Servo(1) = A 'am besten erst die Aktion und dann die Pause
    Waitms 25 'sonst hat der Benutzer ggf das Gefühl es passiert ja garnichts

    Loop

    So könnte man es auch machen. Das spart noch mehr Code.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Als ich angefangen habe zu schreiben, gab es noch keine Antworten. Und jetzt schon so viele.

    das a=109 kannste
    durch

    decr a

    ersetzen
    Ist es nicht einfacher und vom Programmablauf schneller A einen Wert zu geben als eine Rechenoperation auszuführen?

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    29.11.2005
    Ort
    Gleisdorf
    Alter
    59
    Beiträge
    7
    @ all

    Ja das mit den Befehlen , habe sie noch nicht durch gearbeitet.
    Sinn des Programmes ist lernen, einfach mal probieren, für die Programmstrukturierung -dafür habe ich noch kein gefühl wann
    bzw. wo ich es platziere. Aber es ist ja schon ermutigend gewesen
    das es fast auf anhieb funkt. hat.
    Den Case -Befehl werde ich mir jetzt vornehmen und ein kleines Versuchsprogramm schreiben.
    Die nächste grössere Sache für mich ist die Ansteuerung eines Schrittmotors, auch wieder mit Taster (Plus, Leer , Minus).

    @ Marco78

    Wie meinst Du das mit A einen Wert geben, wollte mit den Tastern erreichen das das Servo bei einem Tastendruck um einen Schritt weiter-
    dreht. Habe es auch erreicht aber das an der Endlage schien mir noch nicht so 100%. Hoffe ich habe deine Frage richtig verstanden?

    Danke an alle für die Tipps und Vorschläge.
    Richard

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Wie meinst Du das mit A einen Wert geben,
    Damit meinte ich Vitis.

    Wie sich ein Servo am µC verhält weiss ich nicht. Ich weiss auch nicht, ob es so günstig ist, den Wert jedesmal in der Schleife zu übergeben, auch wenn er sich nicht geändert hat.
    Aber zumindest kann man das Prinzip wie ich es nochmal geschrieben habe auf andere Situationen anwenden.

    Das mit der Endlage kann ich so nicht nachvollziehen. Aber hier gibt es bestimmt einige die sich mit Servos auskennen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad