Hallo, hat jemand eine Idee, ich möchte gerne eine 3-stellige Zahl z.B. 123 in die einzelnen Stellen aufteilen, z.B. a = 1, b=2 und c =3. Kann man natürlich mit Aufwand aufteilen, aber vielleicht gibt es da eine kleine Lösung mit BASCOM. Gruss A. Arndt
Dim A As Byte A = 65 Lcd A Lowerline Lcd Bcd(a) A = Makebcd(a) Lcd " " ; A End
Hi, und wo sind die beiden Variablen für 6 und 5 ?? Gruss
leider kann bascom nur zahlen bis 99 wandeln http://bascom-forum.de/index.php/topic,10.msg462.html#msg462 ich hoffe dieser link kann dir helfen gruss AVR
mit einem cast zur Ganzzahl? Geht sicher auch mit ner Schleife unsigned char a = (unsigned char) (123 / 100); unsigned char b = (unsigned char) ((123 - a * 100) / 10); unsigned char c = (unsigned char) ((123 - a* 100 - b * 10));
Frank Zöllner wrote: > mit einem cast zur Ganzzahl? Geht sicher auch mit ner Schleife > > unsigned char a = (unsigned char) (123 / 100); > unsigned char b = (unsigned char) ((123 - a * 100) / 10); > unsigned char c = (unsigned char) ((123 - a* 100 - b * 10)); Scherzkeks ;) Es geht um B...B..BASCOM. Ja! Ich habs gesagt. PS: Man merkt mal wieder, dass BASCOM Benutzer keine Ahnung haben: BCD ist Binary Coded Decimal. Schon klar, dass es nur bis 99 geht, wenn man (so wie es BASCOM anscheinend macht) nur 2Nibbles bzw. 1Byte Platz hat...
Frank Zöllner wrote: > mit einem cast zur Ganzzahl? Geht sicher auch mit ner Schleife > > unsigned char a = (unsigned char) (123 / 100); > unsigned char b = (unsigned char) ((123 - a * 100) / 10); > unsigned char c = (unsigned char) ((123 - a* 100 - b * 10)); Das ist aber komisches BASCOM. In Assembler hätte ich auch helfen können, in C oder BASCOM aber nicht. MfG, Blaubeer
Hallo, klar mit 2 weiteren temporären Varibalen mit Minus und mal 100 usw. läuft es schon, ich dachte, es gibt dort z.B. den Shift-Befehl zum "Rauschieben von Stellen usw... BASCOM ist schon ok, leicht erlernbar und logisch zu programmieren, wie gesagt, die endlosen BASCOM-Diskussionen wollen wir hier nicht wieder anzetteln, aber, liebe C-User, wenn jemand schreibt "unter BASCOM" brauchen keine Ausführen in C geposted werden mit dem Spruch " Unter C geht das so"... Gruss A. Arndt
> klar mit 2 weiteren temporären Varibalen mit Minus und mal 100 usw. > läuft es schon, ich dachte, es gibt dort z.B. den Shift-Befehl zum > "Rauschieben von Stellen usw... Das hättest du dir selbst beantworten können, wenn du mal die 123(dezimal) in Binär umgerechnet hättest. Denn so rechnet ja eine CPU. Dann Probier mal mit Bitweises Schieben das hinzubekommen was du möchtest. Dann hättest du gemerkt : null, nix, niente
Läßt sich die Zahl nicht als "String" behandeln ??? Dann könnte man einfach Teile davon abschneiden, herausnehmen etc. Nur rechnen kann man dann damit nicht mehr. Aber für eine Darstellung wäre es o.k. Gruß
@ A. Arndt: ich hatte den Problem-Kern nicht auf "BASCOM" gesehen, sonst hätte ich natürlich nicht meinen C-Senf dazugegeben.
a=123 \ 100 b = 123 mod 100 'a = 3, b = 23 a = b \ 10 b = b mod 10 'a = 2, b = 3
Correction: a= 123 \ 100 b = 123 mod 100 'a = 1, b = 23 a = b \ 10 b = b mod 10 'a = 2, b = 3
A. Arndt wrote: > Hallo, > > klar mit 2 weiteren temporären Varibalen mit Minus und mal 100 usw. > läuft es schon, ich dachte, es gibt dort z.B. den Shift-Befehl zum > "Rauschieben von Stellen usw... Nunja, "Rausschieben" kann der AVR nur in 2^n-Schritten, er arbeitet halt binär. Wenn man ihn effizient programmieren will, sollte man versuchen, in seiner Sprache (die Sprache des AVRs, also MC, vermenschlich zu ASM) anzusprechen. Da fällt mir die Subtraktionsmethode mit Konstanten ein, wie sie hier überall in Verbindung mit LCDs angewendet wird. In BASIC fallen mir zum Zerlegen von Zahlen in Ziffern die Befehle str$(), mid$() und val() ein. Inwieweit die von BASCOM unterstützt werden und wie verschwenderisch oder effizient die mit den (knappen) Ressourcen umgehen, entzieht sich meiner Kenntnis, da ich BASCOM für überflüssig halte. > > BASCOM ist schon ok, leicht erlernbar und logisch zu programmieren, wie > gesagt, Das ist Deine Meinung, das sehe ich anders, trotz BASIC-Erfahrung in mehreren Dialekten und (heute noch) Nutzung von BASIC auf anderen Systemen. > die endlosen BASCOM-Diskussionen wollen wir hier nicht wieder > anzetteln, Stimmt, lassen wir das, soll Jeder auf seine Art programmieren. > aber, liebe C-User, wenn jemand schreibt "unter BASCOM" > brauchen keine Ausführen in C geposted werden mit dem Spruch " Unter C > geht das so"... Das kann man aber auch vermeiden, indem man seine Frage bei http://www.bascom-forum.de stellt. Da ist man auf der sicheren Seite nicht mit C oder ASM belästigt zu werden. > > Gruss > A. Arndt Gruß, Hannes
>da ich BASCOM für überflüssig halte.
Sehr gute Formulierung ;-)
Wie wäre es denn mit ner Schleife?
(pseudo-bascom, da ich c bevorzuge):
zahl = 123; // umzuwandelnde zahl
string[3] = ''; // ausgabe string als array
i = 3; // anzahl gewollter stellen
do
{
i = i - 1;
string[i] = 0x30 + zahl MOD 10;
zahl = zahl / 10;
}
while ( i <> 0 )
// in string steht jetzt '123'
Sowas (nur in C) verwende ich immer...
das ist aussem bascom-forum Declare Sub Bcd_schneller_code(byval Code As Word) Call Bcd_schneller_code(20) End '---------------------------------------------- ' Sub Bcd_schneller_code(byval Code As Word) Dim Einer As Byte Dim Zehner As Byte Dim Hundert As Byte Dim Tausend As Byte Do If Code => 1000 Then Code = Code - 1000 Tausend = Tausend + 1 End If Loop Until Code < 1000 Do If Code => 100 Then Code = Code - 100 Hundert = Hundert + 1 End If Loop Until Code < 100 Do If Code => 10 Then Code = Code - 10 Zehner = Zehner + 1 End If Loop Until Code < 10 Einer = Code End Sub
> das ist aussem bascom-forum
Verschone uns bitte damit. Wer BASCOM-Probleme hat, möge dort hingehen.
...
"Schnell" und "BASCOM". Welch herrliches Paradoxum!
Also, ich hab von Bascom keine Ahnung. Aber ein Blick in Manual (böses Wort ;-) verrät mir. Die Funktion STR() wandelt eine Zahl in einen String. Und LCD druckt Zeichen auf dem LCD (Man höre und Staune). Somit sollte das Problem mit BASCOM Mitteln ohne Sicht auf die "dreckigen Details" so lösbar sein. LCD STR(x) Wenn man nur einzelne Auschnitte der Zahl aufs LCD bringen will dann wahrscheinlich mit LCD MID(STR(x), 1, 3) Bin mal auf die Rückkopplung gespannt. ;-) MfG Falk
schneller als C !. die neue bascom version hat jetzt einen Code optimierer genauso wie C
Lötnix wrote: > schneller als C !. die neue bascom version hat jetzt einen Code > optimierer > genauso wie C Na klar ist BASCOM schneller als C, sogar schneller als Assembler! SCNR
Assembler wohl nicht loool ,aber man kann auch in Assembler spaghetti - code erzeugen und selbst dann wird alles lahm...in C gilt das gleiche.
Lötnix wrote: > Assembler wohl nicht loool ,aber man kann auch in > Assembler spaghetti - code erzeugen und selbst dann > wird alles lahm...in C gilt das gleiche. Stimmt. Sehe ich hier fast täglich. Die Sprache ist eigentlich egal, man sollte beim Programmieren eben wissen was man tut. Ein guter C-Programmierer (auf AVR!!) kann auch ASM. Nur so ist er in der Lage, seinen Code in C optimal zu formulieren. Er schaut sich auch den erzeugten ASM-Code an um zu sehen, ob er C sinnvoll einsetzt. ...
Getpulse: 'wait until the signal goes high Wcap = 0 'clear variable Getpulse_1: sbis pind,2 ; skip next if the bit is SET rjmp getpulse_1 ; not skipped so it was 0 Getpulse_2: Incr Wcap sbic pind,2 ; skip netx if the bit is 0 rjmp getpulse_2 ; not skipped so it is high Return auch in bascom kann man ASM direkt einbinden.umd zB. schnelle portimpulse zu erfassen.
Simon Küppers schrieb: >Welch herrliches Paradoxum! Kleiner Tipp: Schau mal nach, wie man das schreibt ... Das soll ja griechisch sein ... Aber Du wolltest sicher testen, ob das jemand von denen merkt: >Man merkt mal wieder, dass BASCOM Benutzer keine Ahnung haben Es soll übrigens noch mehr wichtige Dinge in der Welt geben als die Endlosdiskussion, warum eine Programmiersprache SO TOLL und die andere SO MIES ist ...
Netbird wrote: > Simon Küppers schrieb: > >>Welch herrliches Paradoxum! > > Kleiner Tipp: Schau mal nach, wie man das schreibt ... Das soll ja > griechisch sein ... Aber Du wolltest sicher testen, ob das jemand von > denen merkt: Du hast Recht, es heißt natürlich Paradoxon. >>Man merkt mal wieder, dass BASCOM Benutzer keine Ahnung haben > > Es soll übrigens noch mehr wichtige Dinge in der Welt geben als die > Endlosdiskussion, warum eine Programmiersprache SO TOLL und die andere > SO MIES ist ... Jou, das stimmt. Hab' ja nicht direkt darauf angespielt - Aber in der Regel ist es doch so, dass BASCOM Benutzer eben Baukasten-Programmierer sind. Und etwas derart kompliziertes (wie einen Mikrocontroller) so derbst zu abstrahieren (Durch eben eine Hochsprache), kann meiner Meinung nach nur auf Verlust von Features, Geschwindigkeit oder sonstwas geben. Das wissen die meisten BASCOM-Programmierer aber nicht. Für die ist das "Einfaches programmieren" (Was man aber eben so (denke ich mal) nicht wieder trifft in der Industrie).
Getpulse: 'wait until the signal goes high Wcap = 0 'clear variable Getpulse_1: sbis pind,2 ; skip next if the bit is SET rjmp getpulse_1 ; not skipped so it was 0 Getpulse_2: Incr Wcap sbic pind,2 ; skip netx if the bit is 0 rjmp getpulse_2 ; not skipped so it is high Return auch in bascom kann man ASM direkt einbinden.umd zB. schnelle portimpulse zu erfassen. sieht das nach baukasten aus ??
Lötnix wrote:
> sieht das nach baukasten aus ??
Nein, sieht es nicht. Es ist aber auch kein BASCOM.
Lötnix wrote:
> doch ist es.
Nein, auch wenn man Assembler innerhalb von BASCOM verwendet, wird das
Assembler nicht automatisch zu BASCOM...
>Sourcevergleich
Und als Gegendarstellung bitte parallel dazu die Quellcodegröße und
Abarbeitungszeit angeben ;-)
@Simon: Lass es, es bringt doch nix. Sollen sie doch einen Mega32 oder Mega128 mit 16 MHz Takt einsetzen wo wir mit einem Tiny2313 oder Mega48 mit 1MHz Takt auskommen. Alles schon gesehen hier... Wer BASCOM wirklich beherrscht (ja, die Leute gibt es, es sind aber nicht allzuviele), der kann damit auch schnell und halbwegs effizient programmieren. Vor diesen Leuten habe ich Achtung. Doch die meisten BASCOM-User nutzen BASCOM, weil sie meinen, es sei so einfach, dass man weder Dokumentation noch AVR-Datenblatt lesen braucht. Und diese müllen dieses Forum mit sinnfreien Beiträgen zu. Klar, die gibt's auch in Assembler oder C, es ist also keine Frage der Programmiersprache, sondern eine des selbstständigen Arbeitens, des Fleißes und der Begabung. Programmieren (auf der Ebene des Rechners denken) kann nunmal nicht Jeder, so wie nicht Jeder singen oder Geige spielen kann. ...
@Hannes Lux recht haste -diese amateure bringen recht gute sachen in verruf.aber teure C-Compiler sind balde genauso aufgebaut mit ihren vielen bibliotheken .habe vor jahren den C167 in C programmiert.µVision2 hiess der compiler,war genauso einfach zu proggen wie bascom. leider war die hart und software mir zu teuer.
Hannes Lux wrote: > @Simon: Lass es, es bringt doch nix. Sollen sie doch einen Mega32 oder > Mega128 mit 16 MHz Takt einsetzen wo wir mit einem Tiny2313 oder Mega48 > mit 1MHz Takt auskommen. Alles schon gesehen hier... Jaaajaaa, okaaay ;) > Wer BASCOM wirklich beherrscht (ja, die Leute gibt es, es sind aber > nicht allzuviele), der kann damit auch schnell und halbwegs effizient > programmieren. Vor diesen Leuten habe ich Achtung. Wer wirft sich freiwillig einen Balken zwischen die Beine? Ach, hups. Ich sollte ja aufhören :-) > Doch die meisten BASCOM-User nutzen BASCOM, weil sie meinen, es sei so > einfach, dass man weder Dokumentation noch AVR-Datenblatt lesen braucht. > Und diese müllen dieses Forum mit sinnfreien Beiträgen zu. Klar, die > gibt's auch in Assembler oder C, es ist also keine Frage der > Programmiersprache, sondern eine des selbstständigen Arbeitens, des > Fleißes und der Begabung. Nagut, das stimmt, die gibts tatsächlich überall - auch wenn es bei den BASCOMern am häufigsten ist (behaupte ich jetzt einfach mal für mich). Lötnix wrote: > Sourcevergleich > http://www.roboternetz.de/wissen/index.php/Sourcevergleich Toller Link. War das eigentlich ein Beitrag in der Diskussion zwischen uns beiden? PS: Der Code in C um die Befehlslänge zu messen ist aber nur so geschrieben, wie er dort steht, um es mit BASCOM vergleichen zu können, oder? So würde ich unter C geschweige denn Assembler niemals eine Pulslänge messen. Wenn diese PulsEin-Funktion tatsächlich so in BASCOM implementiert ist - Na dann aber gute Nacht.
die funktion taugt nix habe die schon getestet. ohne timer wird das nichts mit der genauigkeit.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.