Hallo ihr lieben ich stelle mich wohl zu blöd an (mal wieder). Ich weiß wie man über adc den Pin aus liest und auf einem lcd display anzeigt (oder glaube das zu wissen) aber ich schaffe es nicht je nach Spannung die gemessen wird, eine led zum leuchten zu bringen. Es soll wie folgt aussehen 9 Leds, umso niedrieger die spannung ist umso mehr leds sind ausgeschaltet. Die gemessene spannung ist Min 0 V und max 5 V. Ich hoffe das ihr mir helfen könnt den Bascom code zu schreiben und bitte auch eine erklärung dazu. MFG Patrick Das hier ist der Bascom code den ich gefunden habe, der aber leider nur die lcd anzeige steuert. $regfile = "m16def.dat" $crystal = 16000000 Config Adc = Single , Prescaler = Auto , Reference = AVCC Start Adc Const Ref = 5 / 1024 Dim Raw As Word Dim V As Single Do Raw = Getadc(0) V = Raw * Ref Print "RAW: " ; Raw ; Spc(3) ; V ; "V" Wait 1 Loop
Also,,,,... ich mag ja Bascon Leute aber ich habe das Gefühl, das du total den arsch auf hast... (Verzeihung aber das war das Gefühl) Allein deine Frage nach 9 Stück Led lässt mir den Hut hochfliegen. Nimm also bitte 8 oder 16. Das ist so Uso bei Computern. Danach wird es einfach: alle Led mit Vorwiderstand an portB $regfile = "m16def.dat" $crystal = 16000000 Config Adc = Single , Prescaler = Auto , Reference = AVCC Start Adc <--- das kannst du dir sparen dim adcword as word config portb.0 = output config portb.1 = output config portb.2 = output config portb.3 = output config portb.4 = output config portb.5 = output config portb.6 = output config portb.7 = output Do wait 1 adcword = getadc(x) <- x ist der port den du benutzt shift adcword right, 2 <- in ein byte packen portb = adcword loop end
Tut mir leid das dir das missfaelt aber der Artikel wurde auf dem Handy getipp. Prinzipiellt ist es doch eh egal wieviele leds ich benutze. Kann man deinen code auch durch eine if then schleife ersetzen, wenn ja wie saehe das aus. Der sinn soll sein das die leds bei bestimmten werten leuchten und nicht nur wenn die spannung sinkt. If adcword >= 3 then portb.0 = 1 Elseif adcword >= 3,2 then portb.1 = 1 .... End if Danke im vorraus und bitte entschuldigt den verhunsten post und die gross und kleinschreibun, mal klappt sie auf dem handy und meistens nicht.
"Nimm also bitte 8 oder 16. Das ist so Uso bei Computern." Höre bitte nie nie wieder auf irgendetwas aus dem Mund dieses Menschen. Darüber hinaus solltest du Bascom an den Nagel hängen und was anständiges lernen.
Patrick schrieb: > Der sinn soll sein das die leds bei bestimmten werten > leuchten und nicht nur wenn die spannung sinkt. > > If adcword >= 3 then portb.0 = 1 > Elseif adcword >= 3,2 then portb.1 = 1 > .... > End if Genauso kann es klappen.. da hast du recht. Wenn du das dann noch über "Case" machst wirds einfacher. gesetzt den Fall du hast die shift right,2 verwendet , werden ja die 1024 Werte in 256 Werte ungesetzt. Wenn du nun eine Select Case Konstruktion verwendest wäre es so: do wait 1 adcword = getadc (x) shift adcword, right, 2 select case adcword case adcword =0 portb = 0 case adcword >0 portb.0 = 1 case adcword > 10 portb.1 = 1 ** und so weiter else porta.1 = 1 'ein beispiel end select loop end Nun hast du aber das Problem, das die Ports zwar angemacht werden aber niemals zurückgestellt werden. Dazu bietet sich dann ein Timer an, der nach x Millisekunden alles wieder auf null stellt. Gruss Klaus
Eumel schrieb: > "Nimm also bitte 8 oder 16. Das ist so Uso bei Computern." Zunächst einmal heisst es USUS, nicht USO. Was gibt es an der Anforderung des TE, 9 LEDs zu verwenden, zu kritisieren? Sicher sind 8 einfacher anzusprechen, aber danach wurde hier nicht gefragt! > Höre bitte nie nie wieder auf irgendetwas aus dem Mund dieses Menschen. > Darüber hinaus solltest du Bascom an den Nagel hängen und was > anständiges lernen. Bla, Bla, Bla... Und wieder ein unbeirrbarer Jünger der "Westboro Church of C". Oder einer anderen frickeligen und unbrauchbaren "Programmiersprache", welche man nur verwenden kann, wenn einem das Ergebnis bzw. die Funktion des Programms egal ist. Auch hier wieder: Der TE hat nicht nach einer subjektiven Empfehlung einer Programmiersprache gefragt. Es ist schlicht unverständlich, weshalb die Welt heutzutage voll mit irgendwelchen gutmenschenhaften Weltverbesserern ist, die fest davon überzeugt sind, jedem Ihre Meinung mitteilen zu müssen, aber letzlich von nichts eine Ahnung haben.
Klaus De lisson schrieb: > aber ich habe das Gefühl, > das du total den arsch auf hast... Benehmen Jungs, Benehmen wäre gefragt. ;-) Der Weg über die Select Anweisung den dir Klaus beschrieben hat, ist sicherlich zielführend und einfach. Bitte beachte allerdings, dass die Ports auch wieder rückgesetzt werden müssen falls sich der ADC Wert "nach unten" ändert. Entweder in jedem "Select" Fall den (die) nicht zu setzten Ports eine 0 zuweisen oder aber vor dem "Select Case" alle Ports rücksetzen und dann nur die Benötigten Ports setzen. Bezüglich der Auswahl von Programmiersprachen, das ist wie dein Steak, der eine will es englisch, der ander medium und der nächste liebt es totgekocht. Lass dich da nicht von irgendwelchen radikalen Glaubensbrüdern beirren. Nimm das was für Dich am einfachsten und zweckmäßigsten erscheint. Ich nehm mal an dass Du in dem Thema uC recht neu bist aber da macht nichts, jeder hat mal angefangen.
Ich danke euch allen für die hilfe, im prinzip habe ich gemerkt das ich fast alles richtig gemacht habe, ich habe nur nicht daran gedacht das die werte zwichen 0 und 1024 sind ich hatte mit anderen werten gerechnet. Ich benutze bascom weil ich es einfacher finde so kann ich lesen und sehen was die befehle beweirken sollen. Ich programmieren erst seit ein paar Wochen komme aber gut vorran. eine Frage habe ich noch. Wie schaffe ich es jetzt die 1024 auf z.b. 5 Volt zu bringen so das ich das nicht jedesmal umrechnen muss. das ergebniss soll sein Config Adc = Single , Prescaler = Auto , Reference = Avcc Dim A As Word Start Adc Do Wait 1 A = Getadc(7) If A >= 3 Then Led1 = 1 Else Led2 = 0 End If / soll nur ein Beispiel sein ich möchte aber das ich hier die einzelnen volt beträge eingeben kann. laut meiner rechnung sind 0,1 Volt 20,48 steps 5 v --- 1024 steps /50 0,1 V - 20,48 steps
@ Patrick (Gast) >Wie schaffe ich es jetzt die 1024 auf z.b. 5 Volt zu bringen so das ich >das nicht jedesmal umrechnen muss. Mit etwas Prozentrechung, wie sie immer beim AD-Wandler verwendet wird. U_ein = ADC * 5 / 1024 Hier muss man den Datentyp single (Fließkommazahl) verwenden. MFG Falk
tut mir leid wie gesagt ich beschäftige mich nich nicht so lange mit microkontrollern.
Patrick schrieb: > eine Frage habe ich noch. > > Wie schaffe ich es jetzt die 1024 auf z.b. 5 Volt zu bringen so das ich > das nicht jedesmal umrechnen muss. Die Frage ist eher: Was bringt es dir, wenn du dir zuerst die Volt ausrechnest? Ob du jetzt die 9 LED abhängig von einem Wert 0 bis 5 sukzessove einschaltest, oder im anderen Fall bei Werten von 0 bis 1023 ist gehupft wie gesprungen. Im ersten Fall wird jeweils alle 5 / 9 = 0.555 Volt eine LED dazugeschaltet. Im zweiten Fall wird bei allen Vielfachen vom ADC, also bei 1023 / 9 = 113 eine LED dazugeschaltet. Ob du jetzt zuerst die Volt ausrechnest und dann mittels Volt / 0.555 die Anzahl der zu leuchtenden LED bestimmst, oder ob du gleich den ADC Wert nimmst und mittels ADC / 113 diese Anzahl bestimmts, schenkt sich also nichts. Nur dass du im ersten Fall noch sinnlos rundherum rechnest um dann doch beim gleichen Ergebnis zu landen.
Die sache ist aber nun die das ich das lernen möchte, sprich wenn ich das jetzt so stehen lasse weiß ich nachher falls ich etwas anderes machen möchte nicht wie ich es hinbekomme. da dieser Forum post schon einmal steht, denke ich das es sinvoller ist das hier weiter zu erfragen statt nen extra post zu machen, da mir dir anleitungen aus dem buch Ulli Sommer Mikrocontroller programmieren mit Bascom Basic Messen, Steuern, Regeln und Robotertechnik leider nicht so weiter geholfen habe wie ich es mir erhofft habe.
hier noch der Ausschnitt aus dem Buch: Beispiel: ADC.bas ' Bascom ADC $regfile = "m88def.dat" $crystal = 16000000 $baud = 19200 Config Adc = Single , Prescaler = Auto , Reference = Internal Start Adc Const Ref = 5 / 1024 Dim Raw As Word Dim V As Single Do Raw = Getadc(0) V = Raw * Ref Print "RAW: " ; Raw ; Spc(3) ; V ; "V" Wait 1 Loop End
@ Patrick (Gast)
>hier noch der Ausschnitt aus dem Buch:
Der ist goldrichtig und enthält alles was du brauchst.
Wo liegt dann das Problem?
Es tut mir leid ich habe es gerade selber gesehen ich habe mich da wohl ein wenig verlesen bitte entschuldigt die 3 Unsinnigen post umgeschrieben sollte es dann so aussehen. $regfile = "m16def.dat" $framesize = 16 'Stackanweisungen, die eigentlich nur bei größeren Programmen $swstack = 16 'wirklich nötig werden $hwstack = 16 $crystal = 16000000 Config Portd.5 = Output Config Portd.6 = Output Config Porta.0 = Output Config Porta.1 = Output Config Porta.2 = Output Config Porta.3 = Output Config Porta.4 = Output Config Porta.5 = Output Config Porta.6 = Output Config Pina.7 = Input Led1 Alias Porta.0 Led2 Alias Porta.1 Led3 Alias Porta.2 Led4 Alias Porta.3 Led5 Alias Porta.4 Led6 Alias Porta.5 Led7 Alias Porta.6 Led8 Alias Portd.6 Led9 Alias Portd.5 Config Adc = Single , Prescaler = Auto , Reference = Avcc Dim A As Word Dim X As Single Start Adc Const V1 = 5 / 1024 Do Wait 1 A = Getadc(7) X = A * V1 If X > 4 Then Led1 = 1 Else Led2 = 0 End If /als Beispiel Loop
Patrick schrieb: > Die sache ist aber nun die das ich das lernen möchte, sprich wenn ich > das jetzt so stehen lasse weiß ich nachher falls ich etwas anderes > machen möchte nicht wie ich es hinbekomme. da dieser Forum post schon > einmal steht, denke ich das es sinvoller ist das hier weiter zu erfragen Sei mir nicht böse. Aber diese Formel ist nichts anderes als: 100 Äpfel kosten 23 Euro 50 wieviel kosten 28 Äpfel? Sowas solltest du immer und überall ausrechnen können und auch wissen, wie du das ausrechnest. Grundschulkinder können das. 1024 verschickte SMS kosten 5 Euro n verschickte SMS kosten wieviel So vielleicht klarer, was du ausrechnen willst, wenn du die Spannung (wieviel) aus dem gemessenen Wert (n) ausrechnest?
Patrick schrieb: > Config Porta.0 = Output > Config Porta.1 = Output > Config Porta.2 = Output > Config Porta.3 = Output > Config Porta.4 = Output > Config Porta.5 = Output > Config Porta.6 = Output > > Config Pina.7 = Input kann man auch kürzen: Config PortA = Output Config Pina.7 = Input ...oder noch kürzer: DDRA=&b01111111
Karl Heinz Buchegger schrieb: > Grundschulkinder können das. als du zur Grundschule gegangen bist schon, heute braucht man dazu das Abi
@ Patrick (Gast)
>umgeschrieben sollte es dann so aussehen.
Der Anfang ist OK, die Auswertung nicht. Und gewöhn dir eine solide
Formatierung des Quelltextes an. Eher so
1 | Do |
2 | |
3 | Wait 1 |
4 | A = Getadc(7) |
5 | X = A * V1 |
6 | |
7 | If X > 0.5 Then Led1 = 1 Else Led1 = 0 |
8 | If X > 1.0 Then Led2 = 1 Else Led2 = 0 |
9 | If X > 1.5 Then Led3 = 1 Else Led3 = 0 |
10 | If X > 2.0 Then Led4 = 1 Else Led4 = 0 |
11 | If X > 2.5 Then Led5 = 1 Else Led5 = 0 |
12 | If X > 3.0 Then Led6 = 1 Else Led6 = 0 |
13 | If X > 3.5 Then Led7 = 1 Else Led7 = 0 |
14 | If X > 4.0 Then Led8 = 1 Else Led8 = 0 |
15 | If X > 4.5 Then Led9 = 1 Else Led9 = 0 |
16 | |
17 | Loop |
MfG Falk
Danke für den tipp Frank das werde ich mir zu Herzen nehmen. @ karl heinz danke für die info in der Grundschule hätte der Lehrer jetzt zu dir gesagt Theama verfehlt. Das ich den dreizatz benutz habe ist doch Wurst es ging nur um die Frage wie Bascom die Formel haben möchte allerdings habe ich mir die frage ja selber beantwortet. Es ging nur darum einen Multiplikator zu finden statt jeden einzelnen wert auszurechnen. Sicher kann ich das aber es macht die Gechichte doch nur länger und undeutlich. Ein Forum ist nicht dafür gedacht sich über andere Leute lustig, sondern um unwissenen Mit seinem eigenen Wissenstand zu bereichern. Und dieser ist bei mir (thema Bascom) sehr niedrig.
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.