Was genau willst du machen? Ein paar Ports auf 1 setzen? Ich kann kein shellscript.
mfg
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
Was genau willst du machen? Ein paar Ports auf 1 setzen? Ich kann kein shellscript.
mfg
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
ich frage mich, warum meinen viele Anfänger, dass Sprachen, die sie nicht beherrschen, effektiver bzw. weniger effektiv seien?OK, wenn Effektivität in Größe und Geschwindigkeit im Vordergrund stünden, müsste ich mich eh in C oder Assembler versuchen,
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.
nein, Ports werden mit den Port-Registern gesetzt*Um die Ports auf 1 zu setzen könnte ich ja auch
PINA.0 = 1
Pin-Register sind zum Lesen des Zustandes (High oder Low)
entscheide dich. Entweder du benutzt einen Pin als digitalen I/O oder du liest dort die Spannung ein.Im weiteren Verlauf will ich die an den Pins anliegende Spannung messen, bzw. den ADC-Wert ermitteln, und das halt in einem Rutsch.
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
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.
Hoffe es hilft/ da war Michael schnellerCode: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
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.
Hab' ich. Im Augenblick will ich Spannungen auslesen.entscheide dich. Entweder du benutzt einen Pin als digitalen I/O oder du liest dort die Spannung ein.
@Picojetflyer:
Siehe oben.Wo hab ihr eigentlich solche Vorurteile her?
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
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?Im Augenblick will ich Spannungen auslesen
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.
Ehrlich gesagt, kann ich mit deiner Beschreibung nicht wirklich etwas anfangen. Auch nach mehrmaligem Durchlesen nicht.Mir geht es darum, überhaupt mal was Funktionierendes auf die Reihe zu kriegen.
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
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:
Um den ADC auszulesen brauchst du sowieso ne Funktion, die kann man dann wieder in einer Schleife durchlaufen.Code:PORTx |= (1<<MEIN_BIT); Z.B. PORTA |= (1<<PA0) | (1<<PA5);
Z.B.
mfgCode:uint_16 ADC_Read(int channel); for(...) { val = ADC_Read(i); ... }
Lesezeichen