- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: Programmschwierigkeiten vom Anfänger

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Anzeige

    Powerstation Test
    Ich habe es schon gesehen, das ein ganzer Port ausgelesen wurde und auch ein Port komplet beschrieben wurde.

    Ich denke schon das es klappt. Oder ich hoffe es.

    Aber es wird ja ein Byte gelesen und ein Byte geschrieben. Ein Byte in ein Bit wäre ja Portb.0 = Pina

    Portb.0 = Pina.0
    Portb.1 = Pina.1 usw hatte ich zuerst geschrieben. Beim Schreiben kam mir der Gedanke, das es so evtl auch geht.

    Wenn es so klappen sollte, wäre das wahrscheinlich sogar noch Code/Zeit sparender, weil nicht 8 einzelne Bits geschrieben werden müssen.

    Ich bin sehr auf das Feedback gespannt!

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    19.07.2005
    Alter
    44
    Beiträge
    50
    Hallo!
    Ich habe mal ein wenig getestet....

    Bei dem Code von Marco78 kommt es beim Compilieren zu einer Fehlermeldung (unknown Config Parameter) und zwar genau an dieser stelle:
    Code:
    Config Pina = Input
    Dan´n habe ich es mal so probiert:

    Code:
          $regfile = "m16def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 8000000
    
    Config Pina = Input
    Config Portb = Output
    
    Do
    
    Portb.0 = Pina.0
    Portb.1 = Pina.1
    Portb.2 = Pina.2
    Portb.3 = Pina.3
    Portb.4 = Pina.4
    Portb.5 = Pina.5
    Portb.6 = Pina.6
    Portb.7 = Pina.7
    Waitms 100
    Portb = 0
    Waitms 100
    
    Loop
    
    End
    Dann habe ich eine fehlermeldung "unknown config parameter" in der Zeile: "Portb.0 = Pina.0".

    Das Verstehe ich jetzt nicht so ganz...

    Übrigens...als blutiger Anfänger schreibe ich mir den ganzen Code lieber erstmal vollständig auf...dann kann ich nachvollziehen was ich da wirkllich programmiert hab...das Programmieren dann optimieren kann ich ja immer noch

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.04.2005
    Beiträge
    1.469
    Hi
    config Pina geht nicht
    es heißt immer config Portx für einen gesamten Port
    Also config Porta = Input
    Oder config Porta = Output

    Einen einzelnen Pin kann man dann so konfigurieren
    Config Pina.1=input
    Config Pina.1=Output

    Gruß
    Christopher

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Ja, das mit dem Config von mir war falsch

    War gestern doch schon zu spät.

    Code:
    $regfile = "m16def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 8000000
    
    Config Porta = Input
    Config Portb = Output
    
    Do
    
    Portb = Pina
    Waitms 100
    Portb=0
    Waitms 100
    
    Loop
    
    End
    Akzeptiert Bascom bei mir ohne Fehlermeldung.

    Was die Hardware macht, kann ich leider nicht testen.

    Du kannst es ja so erstmal ausprobieren und dann nochmal so programmieren wie du es gemacht hättest.

    PS: Der Fehler mit Config wäre dir aber auch aufgefallen, wenn du den von mir empfohlenen Link mal angeschaut hättest

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    19.07.2005
    Alter
    44
    Beiträge
    50
    Hallo!
    War wohl doch noch etwas zu früh heute

    So klappt es tatsächlich! Auch Hardwaremäßig. Ich möchte trotzdem meine eigentliche Frage noch etwas erweitern...

    Ich kenne das z.B. von SPS steuerungen (Ich weiß man kann das nicht vergleichen) das ein Programm erst eingelesen wird und am ende des Programms werden die Ausgänge geschaltet. Danach wiederholt sich das Programm.

    Ich habe hier ja das Problem, wenn ich z.B. eine Wartezeit von 10s habe, das ich den ganzen Controller diese 10s "stilllege". Gibt es da eine möglichkeit dieses zu umgehen?

    Ich hoffe ihr versteht was ich meine....

    P.S: Ich glaube Basic ist wirklich die beste Programmiersprache für mich...ich werde mir wohl demnächst auch mal ein geeignetes Buch darüber bestellen

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Der Code, so wie ich ihn geschrieben habe geht? Auch das Portb=Pina?

    Das Problem mit Wartezeiten ist nicht so einfach zu lösen.
    SPS kenne ich noch aus der Berufsschule, aber das ist zum einen schon ein paar Jahre her und zum anderen waren die Teile damals schon alt Eine S7 kenne ich nur von Bilder oder wenn mal eine in nem Schaltschrank ist.

    Aber wo ist der Unterschied ob das Programm erst eingelesen wird und am Ende die Ausgänge gesetzt werden zu die Ausgänge werden dann gesetzt wenn es grade nötig ist?

    Wenn die SPS warten muss, wartet sie doch auch nur, oder? Und das erst eingelesene Programm muss auch erst schauen, welche Bedinungen erfüllt sind um Ausgänge zu setzen.

    Um in den Wartezeiten trotzdem arbeiten zu können, gibt es die Möglichkeit Interrupts zu nutzen.

    Während der Wartezeit kann der RS232-Port abgefragt werden. Wenn Daten empfangen wurden, kann auf diese Reagiert werden, obwohl der Rest des Programm noch "wartet".

    Oder ein Taster an einem externen Interrupt (INT0, INT1). Wird der Taster während der Wartezeit betätigt, wird das warten in den Hintergrund gestellt und es wird geschaut, was passieren soll, wenn der Taster gedrückt wird.

    Oder das einlesen von ADC-Werten. Wenn dauerhaft was gemessen werden muss, kann nach Ende der Wandlung der Wert verarbeitet werden.
    Diese Variante ist aber weniger sinnvoll, weil eine Wandlung zu schnell abgeschlossen ist. Der AVR ist dann die meiste Zeit damit beschäftigt die Werte zu verarbeiten.
    Wenn man dann noch die Takte für das sichern der Register bedenkt, könnte das Hauptprogramm ins stocken kommen. Aber möglich wäre es und ist ggf. auch mal von nöten.

    Eine weitere Variante ist das einsetzen von Timern.
    Damit lässt sich viel machen.
    Ein Timer löst nach einer eingestellten Zeit aus und unterbricht das Programm und damit das warten. So wäre es z.B. möglich jede Sekunde einen ADC-Wert zu messen, auch wenn das Hauptprogramm noch 9 Sekunden warten will.
    Aber auch andere Sachen würden sich in der ISR des Timer erledigen lassen.
    Komplizierter wird es, wenn das Programm nahzu multitaskfähig werden soll wie man es vom PC her kennt. (Wobei ein PC auch nur einen Schritt nach dem anderen abarbeiten kann!!!)
    Der Timer könnte auch jede Sekunde auslösen und eine Variable hochzählen. Im Hauptprogramm kann man dann schauen, ob die 10 Sekunden schon abgelaufen sind und sich dann der nächsten Aufgabe zuwenden.
    Sind die 10 Sekunden noch nicht abgelaufen, können erstmal andere Sachen gemacht werden.

    Schau dir wirklich mal die Seite von Roland Walter an. Für den Einstieg ist die sehr gut!

    Zum Thema Multitasking und AVRs findest du im Internet auch ein paar Infos.

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    19.07.2005
    Alter
    44
    Beiträge
    50
    Hallo!
    Danke für die wirklich ausführliche Antwort!

    Damit ist mir echt gut geholfen! Dann kann ich das bei meinen ersten Programmversuchen mit berücksichtigen.

    Der Code hat einwandfrei funktioniert (auch Portb=Pina).

    Danke für die ganzen Hilfen!!!

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Solar Speicher und Akkus Tests