Autor |
Variable+Wertebereich = Problem |
|
|
|
|
BID = 510456
Kleinspannung Urgestein
Beiträge: 13359 Wohnort: Tal der Ahnungslosen
|
|
Hallo µc-Experten!
Euer Programmier-Dau hat mal wieder ein Problem.
Folgender Sachverhalt:
Der AD-Wandler des Mega 8 liest mir 2 Temp.-Sensoren aus,und speichert den Wert(8-Bit) in zwei Variablen.Damit wird dann die PWM für ein paar Lüfter gesteuert.Funktioniert soweit auch.ICh möchte aber eine "Treppe" damit die Sache nicht auf kleinste Änderungen reagiert.
Also :
AD-Wert von A-B = PWM-Wert X
AD-Wert von B-C = PWM-Wert Y
usw.
Hoffe mich halbwegs verständlich ausgedrückt zu haben...
Ich habe das Problem mit einer Menge If > Then Anweisungen gelöst,aber das ist umständtlich,und nicht so das wahre.Funktioniert aber auch so schlecht und recht...
Und nun die (wahrscheinlich blöde) Frage:
Wie macht man das richtig,einen Wertebereich so zu organisieren,das an bestimmten Punkten bestimmte Ausgaben/Reaktionen erfolgen können?
Bzw. wo könnte ich das mal Blondinensicher erklärt nachlesen?
Und falls sich einer erbarmt,dann noch ein Hinweis:
a)ich bin auf dem Gebiet geistig minderbemittelt
b) kann nur etwas Bascom
Danke für das lesen bis hierher!
_________________
Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.
(Albert Einstein) |
|
BID = 510458
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
|
Kommt drauf an, gibt viele Möglichkeiten:
Du hast 256 versch. Kombinationsmöglichkeiten. Wieviele "Treppenstuffen" sollen denn vorhanden sein?
Wenn jeweils nur beim übernächsten Wert geschaltet werden soll, oder beim vierten, achten, etc. oder allgemein beim Vielfachen von 2^n, dann teilst du durch n (n mal alle Bits nach rechts schieben) und gibts das ganze auf ein Select-Case-Konstrukt:
dim i as byte
i = ADC
i = i / 4
select case i
case 0: ...
case 1: ....
end select
Du kannst auch, wenn genügend SRAM vorhanden ist und die Treppe nicht linear ist, ein Array mit Anzahl Indizes wie möglichen ADC-Werten anlegen, zu Anfang dann manuell das Array füllen und dann sagen:
dim i as byte
i=ADC
PWM = tab[i]
EditIn Basic greift man auf Arrays mit normalen Klammern zu, das hier war C. Es müsste heißen: PWM = tab(i)
Etwas effizienter ginge das weniger abstrakt direkt im Flashrom mit Tabellen, also quasi das gleiche wie mit Arrays, nur SRAM-schonender. Nur wie das in Bascom geht - keine Ahnung.
Edit:
Ha! Ich bin sowas von Blondine... Meine Haare sind fast so lang, dass sie zum Bauchnabel reichen .
Also sieh dich vor, wie du über Blondinen spricht
_________________
[ Diese Nachricht wurde geändert von: DonComi am 24 Mär 2008 23:16 ]
[ Diese Nachricht wurde geändert von: DonComi am 24 Mär 2008 23:18 ] |
|
BID = 510462
Kleinspannung Urgestein
Beiträge: 13359 Wohnort: Tal der Ahnungslosen
|
Zitat :
DonComi hat am 24 Mär 2008 23:14 geschrieben :
|
Wieviele "Treppenstufen" sollen denn vorhanden sein?
|
Na so 4 oder 5 reichen völlig
Zitat :
|
gibts das ganze auf ein Select-Case-Konstrukt:
|
Wenn du das grad so sagst...
Davon habe ich schon mal was gelesen (glaube in Zusammenhang mit einem elektron."Würfel").
Mal sehen,ob ich das hinbekomme
Zitat :
|
Nur wie das in Bascom geht - keine Ahnung.
|
Ja,ich weiß...
Sollte mich gefälligst befleißigen,Assembler zu lernen.
Nur das geht in meine Birne nicht rein,Bascom versteh ich wenigstens soweit,das da wenigstens manchmal was brauchbares rauskommt
Zitat :
|
Ha! Ich bin sowas von Blondine...
|
Jo,ich auch.
Auch wenn von meiner "blonden Mähne" jetzt auf meine alten Tage nicht mehr viel von über geblieben ist...
_________________
Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.
(Albert Einstein)
|
BID = 510465
Jornbyte Moderator
Beiträge: 7170
|
Das ASM-Angebot hatte ich dir schon mal gemacht....
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 510466
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Wenns wirklich nur 4 oder 5 sind, dann ist es doch einfach, solange die Differenz von einem zum nächsten Punkt gleich ist. hier dann einfach durch (256/5) teilen und so runden, dass immer eine gleiche Verteilung aller Werte vorhanden ist.
NUR: die Daten werden doch nicht schon linear sein?
Da bringt dann rechnen nicht viel - da muss dann wirklich ne Tabelle rein.
Die Tabelle liegt irgendwo im ROM. Das erste Element (Basic b) hat den Wert für ADC=0, denn der ADC-Wert wird auf b addiert und der Wert aus der Tabelle geholt.
Schwups - ist die Treppe fertig...
Edit:
Schau mal nach, ob man Dateien später zu den Objekt-Dateien vom Bascom-Compiler linken lassen kann. Dann zeig ich dir das mit den Tabellen. Noch toller wäre es, wenn man die Objektdateien vom Basiccompiler mit gcc verarbeiten könnte. Ich könnte dir dann die Teile, die du nicht mit Basic machen kannst, programmieren, dazulinken und das Hexfile schicken .
Edit2: oder lern Assembler .
_________________
[ Diese Nachricht wurde geändert von: DonComi am 24 Mär 2008 23:42 ]
[ Diese Nachricht wurde geändert von: DonComi am 24 Mär 2008 23:43 ]
|
BID = 510732
selfman Schreibmaschine
Beiträge: 1681 Wohnort: Seekirchen a. W.
|
Zitat :
| Etwas effizienter ginge das weniger abstrakt direkt im Flashrom mit Tabellen, also quasi das gleiche wie mit Arrays, nur SRAM-schonender. Nur wie das in Bascom geht - keine Ahnung |
Im original BASIC hießen die Befehle:
READ und DATA
Mit DATA gefolgt von einem Bezeichner und einer sinnlosen Wursch von Werten, die nur durch den Speicherplatz begrenzten Anzahl wurde, wurde das Array angelegt.
Und READ hat mit jedem Durchlauf einen Wert ausgelesen, angefangen beim ersten usw. Irgenwelche Befehle um auf ein nummernmäßig bezeichnetes Element zuzugreifen gab es glaub ich auch.
Ob es was vergleichbares bein BASCOM auch gibt,
Schöne Grüße Selfman
_________________
Traue keinem Ding, das du nicht selber vermurkst hast.
|
BID = 510787
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
Zitat :
selfman hat am 25 Mär 2008 22:05 geschrieben :
|
Im original BASIC hießen die Befehle:
|
C64 oder Apple II ?
[ Diese Nachricht wurde geändert von: hajos118 am 26 Mär 2008 7:43 ]
|
BID = 510808
selfman Schreibmaschine
Beiträge: 1681 Wohnort: Seekirchen a. W.
|
Zitat :
| C64 oder Apple II ? |
Muß ich jetzt nicht verstehen, oder?
Basic ist grundsätzlich eine Hochsprache und somit sind die Befehle unabhängig von der Hardware.
Das jeder Basicinterpreter damals eine etwas eigenständige Interpretation über den Umfang der Sprache und die Funktion der Befehle hatte, steht auf einem anderen Blatt.
Das war aber nicht im eigenlichen Sinn der Sache, sondern vielmehr eine Versuch seitens der Hersteller in die Sprache auf einfach Art und Weise ein paar Vorteile seiner Maschine zu implementieren.
Letztendlich war es aber eine Inkonsequenz im Sinne der Sache!
Ach übrigens: TI99-4A
Schöne Grüße Selfman
_________________
Traue keinem Ding, das du nicht selber vermurkst hast.
|
BID = 510880
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
Na ja, das waren die beiden Vertreter, die praktisch einen BAsic-Interpreter als Benutzeroberfläche hatten.
Beide hatten so ihre Eigenarten.
btw.: Der "DATA" - Befehl benötigt keinen Bezeichner sondern nur eine Liste mit Werten - Mittels dem "READ" Befehl wird dann jeweils ein Wert aus der Liste der entsprechenden Variable zugewiesen. (Dann fehlt noch "RESTORE" - Damit wird der DATA Befehl == Zeiger auf den nächsten Wert wieder zurückgesetzt)
... Ach ist das lang' her ....
|