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

Thema: Wie kann ich eine Variable mit unterschiedlichen Werten in einer Schleife füllen?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.06.2010
    Beiträge
    10

    Wie kann ich eine Variable mit unterschiedlichen Werten in einer Schleife füllen?

    Anzeige

    Praxistest und DIY Projekte
    Hallo werte Gemeinde,

    ich komme irgendwie nicht weiter..
    Ich möchte eine Variable mit unterschiedlichen Werten füllen. Mit for geht es nicht. For kann nur hoch, bzw. runterzählen, zumindest soweit ich das bisher begriffen habe.
    Also in der Form for i in 1 to 10 .
    In Shellscript würde ich das so programmieren.

    for i in PINA.0 PINA.1 PINA.2 PINA.3 PINA.4 PINA.5 PINB.2 PINB.3 PIND.2

    do
    i = 1
    echo $i (oder sonst was)
    done

    Wie kodiere ich das in Bascom?

    For i = PINA.0 PINA.1 PINA.2 PINA.3 PINA.4 PINA.5 PINB.2 PINB.3 PIND.2
    i = 1
    Next i

    geht nicht.

    Könnt Ihr mir bitte einen Tip geben?

    Viele Grüße

    Waldi

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Was genau willst du machen? Ein paar Ports auf 1 setzen? Ich kann kein shellscript.

    mfg

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.06.2010
    Beiträge
    10
    Hallo Wsk8,

    in diesem Fall will ich genau das machen. Im weiteren Verlauf will ich die an den Pins anliegende Spannung messen, bzw. den ADC-Wert ermitteln, und das halt in einem Rutsch.
    Um die Ports auf 1 zu setzen könnte ich ja auch

    PINA.0 = 1
    PINA.1 = 1
    .
    .
    .
    PIND.2 = 1

    schreiben.

    Zum Spannungen abzufragen scheint mir das aber sehr ungeschickt.
    Überdies würde durch solch ungeschickte Programmierung das Programm stark an Größe gewinnen, und ebenso an Lesbarkeit und Übersichtlichkeit verlieren.
    Auch wenn es in diesem Fall nichht relevant ist, würde es dadurch nicht auch langsamer werden?
    OK, wenn Effektivität in Größe und Geschwindigkeit im Vordergrund stünden, müsste ich mich eh in C oder Assembler versuchen, aber da habe ich so viel Nachholbedarf, dass ich das in diesem Leben vergessen kann.

    Viele Grüße

    Waldi

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    OK, wenn Effektivität in Größe und Geschwindigkeit im Vordergrund stünden, müsste ich mich eh in C oder Assembler versuchen,
    ich frage mich, warum meinen viele Anfänger, dass Sprachen, die sie nicht beherrschen, effektiver bzw. weniger effektiv seien?
    Wie effektiv ist es z.B. für einen Anfänger, einen High-Level-Befehl in Assembler zu schreiben?

    Das Problem ist doch eher das Verständnis, wie ein Programm funktioniert? Da ist die Programmiersprache übrigens egal.
    Grundkenntnisse über die Hardware werden in allen Sprachen benötigt.

    Um die Ports auf 1 zu setzen könnte ich ja auch

    PINA.0 = 1
    nein, Ports werden mit den Port-Registern gesetzt*
    Pin-Register sind zum Lesen des Zustandes (High oder Low)

    Im weiteren Verlauf will ich die an den Pins anliegende Spannung messen, bzw. den ADC-Wert ermitteln, und das halt in einem Rutsch.
    entscheide dich. Entweder du benutzt einen Pin als digitalen I/O oder du liest dort die Spannung ein.

    Es gibt für jede der genannten Sprachen Tutorials, durch die muss eigentlich jeder durch, der programmieren will. Hier im Roboternetz gibt es gute Beispiele im Wiki. Gerade die Pin-Port Geschichte mit DDR wird in Tutorials meist als erstes erklärt.

    Gruß, Michael

    *an alle, die es wirklich wissen: andere Varianten sind für das Verständnis erstmal nicht hilfreich

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von Picojetflyer
    Registriert seit
    03.08.2004
    Ort
    Sauerland
    Beiträge
    247
    Zitat Zitat von waldi_n Beitrag anzeigen
    OK, wenn Effektivität in Größe und Geschwindigkeit im Vordergrund stünden, müsste ich mich eh in C oder Assembler versuchen
    Wo hab ihr eigentlich solche Vorurteile her?

    Was du mit deinen Programm bezwecken möchtest hab ich zwar nicht verstanden aber ich erkläre es mal so.

    Code:
    config Porta = output 'kompletten Port A als Ausgang definieren
    
    Porta =&B11111111 'alle Pins auf High setzen 
    Porta = 255 ' macht das Gleiche, nur in dezimaler Schreibweise
    
    Porta.0 = 1 ' nur PortA.0 einschalten
    Porta.0 = 0 ' Nur PortA.0 ausschalten 
    
    config Porta = input ' kompletten Port A als Eingang setzen
    Porta = &B11111111 ' Alle Pullups von Port A aktivieren
    Dim A as Byte
    
    A = Pina ' komplette Zustandstabelle von Porta in die Variable A geschrieben. 
    A = Pina.0 'nur Zustand von Pina.0 in die Variable A geschrieben
    
    
    '#####################################################
    'ADC
    '#####################################################
    
    Config ADC = Single, Prescaler = Auto ' ADC einstellen, Single ist nötig für den GetADC Befehl, mit Prescaler Auto stellt sich Bascom die Abtastgeschwindigkeit selbst ein.
    
    Dim Anlg as Word ' Variable definieren (die meisten Controller haben 10Bit ADCs. Deswegen die Variable als Word, Integer würde auch gehen
    
    Start ADC ' alle ADCs werden gestartet.
    
    Anlg = GetADC(0) 'Frage den ersten ADC (AIN0) ab und schreibe den Wert in die Variable Anlg
    Hoffe es hilft/ da war Michael schneller

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    29.06.2010
    Beiträge
    10
    Zitat Zitat von Michael Beitrag anzeigen
    ich frage mich, warum meinen viele Anfänger, dass Sprachen, die sie nicht beherrschen, effektiver bzw. weniger effektiv seien?
    Wie effektiv ist es z.B. für einen Anfänger, einen High-Level-Befehl in Assembler zu schreiben?

    Das Problem ist doch eher das Verständnis, wie ein Programm funktioniert? Da ist die Programmiersprache übrigens egal.
    Grundkenntnisse über die Hardware werden in allen Sprachen benötigt.
    Ja Michael, das ist absolut richtig. Und bis ich effektiven Code schreibe, ist jedes andere schlecht geschriebene Programm schneller, als meins.
    Ich möchte diese Diskussion darüber auch nicht ewig fortführen. Ich hatte die Bemerkung nur gemacht, um einer Antwort in Sinne von "Wenn es Dir auf Geschwindigkeit ankommt, dann schreib's doch in Assembler:" vorzubeugen. Im Übrigen finden sich solche Effektivitätsaussagen in der Fachliteratur zu Hauf.
    Aber das kann man eh nur auf einem Niveau vergleichen, von dem ich noch Lichtjahre entfernt bin.
    Mir geht es darum, überhaupt mal was Funktionierendes auf die Reihe zu kriegen. Und zeitkritisch ist mein Anspruch eh nicht.
    entscheide dich. Entweder du benutzt einen Pin als digitalen I/O oder du liest dort die Spannung ein.
    Hab' ich. Im Augenblick will ich Spannungen auslesen.

    @Picojetflyer:

    Wo hab ihr eigentlich solche Vorurteile her?
    Siehe oben.
    Um ehrlich zu sein, halte ich diese Diskussionen für genauso sinnlos und überflüssig, wie die Glaubenskriege zwischen Linux-und Windows-Anhängern, um mal ein klassisches Beispiel zu nennen. Wer maximal effektiv sein will, braucht seine Kunst einfach nur 100%ig zu beherschen.
    Aber lassen wir das.
    Ich danke Dir für Deinen Tipp. Ich werde es mal ausprobieren.
    Zumindest die Pins auf 1 zu setzen gelingt mir damit besser, die ADC-Geschichte muss ich erst mal durchdenken.

    Viele Grüße

    Waldi

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    Im Augenblick will ich Spannungen auslesen
    wie gesagt, ich bin der Meinung, dass Tutorials nicht umsonst sind. Sie ersparen es den Postern in Foren, immer wieder die gleichen Grundlagen auf's neue durchzukauen. Verstehst du sicher?
    Der klassische Weg eben, LEDs blinken lassen, Lauflicht, Tastereingaben, verschiedene Variablen, Timer, LCD oder serielle Schnittstelle, AD-Wandler. Wie du siehst, ordne ich AD-Wandler weiter hinten ein.

    Mir geht es darum, überhaupt mal was Funktionierendes auf die Reihe zu kriegen.
    Ehrlich gesagt, kann ich mit deiner Beschreibung nicht wirklich etwas anfangen. Auch nach mehrmaligem Durchlesen nicht.
    Versuch doch einfach mal eine Anwendung, die du machen willst, deiner Mutter zu beschreiben.
    Das ist kein Scherz.
    Nicht jeder der dir helfen könnte, versteht dich, aber die Beschreibung für die Mutter ist der gemeinsame Verständnislevel

    Gruß, Michael

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Zitat Zitat von Picojetflyer Beitrag anzeigen
    Wo hab ihr eigentlich solche Vorurteile her?
    Von Leuten mit mehr Erfahrungen als wir?
    Gab hier erst neulich nen Thread, wo jemand den gleichen Code in Bascom und C programmiert hat und der in C war 14x schneller. Und wieso tun sich so viele C und ASM an, wenns in Bascom angeblich genauso gut funktioniert?? (Und ich spreche hier nicht davon, ob C oder Bascom besser für Anfänger geeignet ist.) Passt irgendwie nicht zusammen.
    Aber ich sehs schon kommen, in den nächsten 2 Seiten wird mir jetzt sicher wieder erklärt, dass Bascom genauso gut ist und das ich total falsch liege...

    BTT
    Um Ports zu setzten, brauchst du keine Schleife. Geht ganz einfach. Leider kann ichs dir nur in C sagen:
    Code:
    PORTx |= (1<<MEIN_BIT);
    
    Z.B.
    PORTA |= (1<<PA0) | (1<<PA5);
    Um den ADC auszulesen brauchst du sowieso ne Funktion, die kann man dann wieder in einer Schleife durchlaufen.
    Z.B.
    Code:
    uint_16 ADC_Read(int channel);
    
    for(...) {
      val = ADC_Read(i);
      ...
    }
    mfg

Ähnliche Themen

  1. Wie kann ich eine Metrallplatte zuschneiden?
    Von tach810i im Forum Mechanik
    Antworten: 14
    Letzter Beitrag: 01.08.2013, 19:50
  2. Antworten: 8
    Letzter Beitrag: 22.07.2008, 18:05
  3. Wie kann ich in eine If einen Bereich auswerten?
    Von Henry im Forum C - Programmierung (GCC u.a.)
    Antworten: 11
    Letzter Beitrag: 30.05.2007, 16:53
  4. Wie entnehme ich einer variable bestimmte bits als neue Var?
    Von Kaiser-F im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 31.08.2005, 08:38
  5. Antworten: 5
    Letzter Beitrag: 25.02.2005, 06:50

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests