Hallo an Alle, Ich bin ein absoluter Anfänger auf dem Gebiet der μ-Controllertechnik. Habe lediglich bisher ein paar kleinere Programme geschrieben (Timer0, AD-Wandlung) Muss als Abschlussarbeit nicht desto trotz ein kleineres Projekt realisieren, was mich vor größere Probleme stellt. Ich habe ein Projekt mit 2 Poti´s. Diese Potis sollen testweise LED´s ansprechen. und zwar 3 für den einen Poti und 3 für den anderen Poti. Ich weiß das ich für diese Schaltung eine AD-Wandlung brauche und den Poti´s die jeweiligen LED´s zuweisen muss, allerdings weiß ich nicht wie ich die beiden Potis miteinander verknüpfen kann. Bisher funktioniert immer nur der eine oder der andere Poti. Wie kann ich diese beiden Funktionen zusammenführen??? Geht das über MX0?
Hallo Marco! Was willst du denn genau machen? Soll ein Poti je nach Stellung mehr oder weniger LED's ansprechen oder sollen die 3 LEDs bei eier bestimmten Stellung einfach an und ausgehen...... und welchen µController hast du denn? Programmiersprache müsste man auch noch wissen. Gruß Steven
Hallo, also ich habe den 8051VC_2, will mit Keil (microvision) programmieren in Assembler. Ich will mit den Potis die LED´s zum leuchten bringen, also mit dem langsamen aufdrehen des oberen Potis sollen die oberen 3 angehen (erst die erste, dann die ersten beiden und bei vollem Anschlag des Potis alle 3). Das gleiche mit dem unteren Poti und den unteren 3 Led´s.
Da gibts so einiges an Möglichkeiten, wie man das am günstigsten realisieren kann. Aber ich denke mal du willst das mit AD-Converter lösen. Hast du schon was aufgebaut? Hast du zwei ADC am 8051? Schreib einfach mal was du schon hast. Am besten noch den Quellcode gleich mit. MfG Steven
marco wrote:
> also ich habe den 8051VC_2
???
Was ist das?
Die Leute hier können zwar gut programmieren, aber saumäßig schlecht
hellsehen.
Bitte komplette Typangabe und Hersteller oder Link.
Peter
Hi, also das ist mal der aktuelle Quellcode. Unser Problem ist es momentan beide Poti`s miteinander zu verknüpfen, so dass wir z.B. Poti 1 aufdrehen und die linken LED`s (je nach Potistellung) leuchten und dann z.B. Poti 2 auf die gewünschte Stellung bringen und das gleiche passiert, nur eben für die anderen LED`s. ;----------------------------------------------------------------------- - ;Initialisierungsteil fuer allgemeine Konstanten ;----------------------------------------------------------------------- - CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp INIT ; ;----------------------------------------------------------------------- - ;Interrupt-Vektoren ;----------------------------------------------------------------------- - ;ORG ;----------------------------------------------------------------------- - ;Initialisierungsteil fuer On-Chip Peripherie ;----------------------------------------------------------------------- - ORG 100H ;Programmstart bei 100H INIT: mov ADCON,#10000000B ;Kanal AN0 angewaehlt, Stop nach der Wandlung ;----------------------------------------------------------------------- - ;Programmschleife ;----------------------------------------------------------------------- - SCHLEIFE: jnb MX0,ABFRAGE_POTI2 jnb MX0,ABFRAGE_POTI2 jmp SCHLEIFE clr P2.3 ;Leuchte 1 Port 3.2 ruecksetzen, Programm laeuft ABFRAGE_POTI1: clr MX0 ;Setzt MX0 auf 1 mov DAPR,#0 ;A/D Wandlung wird durch schreiben in das DAPR-Register ausgelöst. jb BSY,$ ;Warten bis A/D Wandlung stop, BSY beendet die A/D Wandlung mov A,ADDAT ;Das Ergebnis der A/D Wandlung befindet sich im ADDAT-Register clr C ;Carry loeschen subb A,#103 ;entspricht U>2V jc LED4_GREEN_1 ;Sprung da U<=2V subb A,#51 ;entspricht U>3V jc LED5_GREEN ;Sprung da U<=3V subb A,#51 ;entspricht U>4V jc LED6_YELLOW ;Sprung da U<=4V setb P2.3 ;Schaltet LED4_GREEN aus setb P2.4 ;Schaltet LED5_GREEN aus setb P2.5 ;Schaltet LED6_YELLOW aus clr P2.6 ;Schaltet LED7_RED ein reti jmp ABFRAGE_POTI1 ;Sprung zum Programmbeginn LED4_GREEN_1: clr P2.3 ;Schaltet LED4_GREEN ein setb P2.4 ;Schaltet LED5_GREEN aus setb P2.5 ;Schaltet LED6_YELLOW aus setb P2.6 ;Schaltet LED7_RED aus reti jmp ABFRAGE_POTI1 ;Sprung zum Programmbeginn LED5_GREEN: setb P2.3 ;Schaltet LED4_GREEN aus clr P2.4 ;Schaltet LED5_GREEN ein setb P2.5 ;Schaltet LED6_YELLOW aus setb P2.6 ;Schaltet LED7_RED aus reti jmp ABFRAGE_POTI1 ;Sprung zum Programmbeginn LED6_YELLOW: setb P2.3 ;Schaltet LED4_GREEN aus setb P2.4 ;Schaltet LED5_GREEN aus clr P2.5 ;Schaltet LED6_YELLOW ein setb P2.6 ;Schaltet LED7_RED aus reti jmp ABFRAGE_POTI1 ;Sprung zum Programmbeginn clr P2.3 ;Leuchte 1 Port 3.2 ruecksetzen, Programm laeuft ABFRAGE_POTI2: setb MX0 ;Setzt MX0 auf 0 mov DAPR,#0 ;A/D Wandlung wird durch schreiben in das DAPR-Register ausgelöst. jb BSY,$ ;Warten bis A/D Wandlung stop, BSY beendet die A/D Wandlung mov A,ADDAT ;Das Ergebnis der A/D Wandlung befindet sich im ADDAT-Register clr C ;Carry loeschen subb A,#103 ;entspricht U>2V jc LED4_GREEN_2 ;Sprung da U<=2V subb A,#51 ;entspricht U>3V jc LED3_GREEN ;Sprung da U<=3V subb A,#51 ;entspricht U>4V jc LED2_YELLOW ;Sprung da U<=4V setb P2.3 ;Schaltet LED4_GREEN aus setb P2.2 ;Schaltet LED3_GREEN aus setb P2.1 ;Schaltet LED2_YELLOW aus clr P2.0 ;Schaltet LED1_RED ein reti jmp ABFRAGE_POTI2 ;Sprung zum Programmbeginn LED4_GREEN_2: clr P2.3 ;Schaltet LED4_GREEN ein setb P2.2 ;Schaltet LED3_GREEN aus setb P2.1 ;Schaltet LED2_YELLOW aus setb P2.0 ;Schaltet LED1_RED aus reti jmp ABFRAGE_POTI2 ;Sprung zum Programmbeginn LED3_GREEN: setb P2.3 ;Schaltet LED4_GREEN aus clr P2.2 ;Schaltet LED3_GREEN ein setb P2.1 ;Schaltet LED2_YELLOW aus setb P2.0 ;Schaltet LED1_RED aus reti jmp ABFRAGE_POTI2 ;Sprung zum Programmbeginn LED2_YELLOW: setb P2.3 ;Schaltet LED4_GREEN aus setb P2.2 ;Schaltet LED3_GREEN aus clr P2.1 ;Schaltet LED2_YELLOW ein setb P2.0 ;Schaltet LED1_RED aus jmp ABFRAGE_POTI2 ;Sprung zum Programmbeginn end
Was erwartest Du, was der Befehl "RETI" tun soll? Und dann schau in die Befehlsbeschreibung, um zu sehen, daß er bestimmt nicht das tut, was Du erwartest und schmeiß ihn raus. Peter
da hab ich nur rumgebastelt und wollte sehn was passiert. kommt natürlich raus. hier ist mal das geänderte: die schleife ganz am anfang hab ich auch raus, da ich nur schnell testen wollte ob auch die A/D Wandlung mit dem zweiten Poti funktioniert. ;----------------------------------------------------------------------- - ;Initialisierungsteil fuer allgemeine Konstanten ;----------------------------------------------------------------------- - CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp INIT ; ;----------------------------------------------------------------------- - ;Interrupt-Vektoren ;----------------------------------------------------------------------- - ;ORG ;----------------------------------------------------------------------- - ;Initialisierungsteil fuer On-Chip Peripherie ;----------------------------------------------------------------------- - ORG 100H ;Programmstart bei 100H INIT: mov ADCON,#10000000B ;Kanal AN0 angewaehlt, Stop nach der Wandlung ;----------------------------------------------------------------------- - ;Programmschleife ;----------------------------------------------------------------------- - clr P2.3 ;Leuchte 1 Port 3.2 ruecksetzen, Programm laeuft ABFRAGE_POTI1: clr MX0 ;Setzt MX0 auf 1 mov DAPR,#0 ;A/D Wandlung wird durch schreiben in das DAPR-Register ausgelöst. jb BSY,$ ;Warten bis A/D Wandlung stop, BSY beendet die A/D Wandlung mov A,ADDAT ;Das Ergebnis der A/D Wandlung befindet sich im ADDAT-Register clr C ;Carry loeschen subb A,#103 ;entspricht U>2V jc LED4_GREEN_1 ;Sprung da U<=2V subb A,#51 ;entspricht U>3V jc LED5_GREEN ;Sprung da U<=3V subb A,#51 ;entspricht U>4V jc LED6_YELLOW ;Sprung da U<=4V setb P2.3 ;Schaltet LED4_GREEN aus setb P2.4 ;Schaltet LED5_GREEN aus setb P2.5 ;Schaltet LED6_YELLOW aus clr P2.6 ;Schaltet LED7_RED ein jmp ABFRAGE_POTI1 ;Sprung zum Programmbeginn LED4_GREEN_1: clr P2.3 ;Schaltet LED4_GREEN ein setb P2.4 ;Schaltet LED5_GREEN aus setb P2.5 ;Schaltet LED6_YELLOW aus setb P2.6 ;Schaltet LED7_RED aus jmp ABFRAGE_POTI1 ;Sprung zum Programmbeginn LED5_GREEN: setb P2.3 ;Schaltet LED4_GREEN aus clr P2.4 ;Schaltet LED5_GREEN ein setb P2.5 ;Schaltet LED6_YELLOW aus setb P2.6 ;Schaltet LED7_RED aus jmp ABFRAGE_POTI1 ;Sprung zum Programmbeginn LED6_YELLOW: setb P2.3 ;Schaltet LED4_GREEN aus setb P2.4 ;Schaltet LED5_GREEN aus clr P2.5 ;Schaltet LED6_YELLOW ein setb P2.6 ;Schaltet LED7_RED aus jmp ABFRAGE_POTI1 ;Sprung zum Programmbeginn clr P2.3 ;Leuchte 1 Port 3.2 ruecksetzen, Programm laeuft ABFRAGE_POTI2: setb MX0 ;Setzt MX0 auf 0 mov DAPR,#0 ;A/D Wandlung wird durch schreiben in das DAPR-Register ausgelöst. jb BSY,$ ;Warten bis A/D Wandlung stop, BSY beendet die A/D Wandlung mov A,ADDAT ;Das Ergebnis der A/D Wandlung befindet sich im ADDAT-Register clr C ;Carry loeschen subb A,#103 ;entspricht U>2V jc LED4_GREEN_2 ;Sprung da U<=2V subb A,#51 ;entspricht U>3V jc LED3_GREEN ;Sprung da U<=3V subb A,#51 ;entspricht U>4V jc LED2_YELLOW ;Sprung da U<=4V setb P2.3 ;Schaltet LED4_GREEN aus setb P2.2 ;Schaltet LED3_GREEN aus setb P2.1 ;Schaltet LED2_YELLOW aus clr P2.0 ;Schaltet LED1_RED ein jmp ABFRAGE_POTI2 ;Sprung zum Programmbeginn LED4_GREEN_2: clr P2.3 ;Schaltet LED4_GREEN ein setb P2.2 ;Schaltet LED3_GREEN aus setb P2.1 ;Schaltet LED2_YELLOW aus setb P2.0 ;Schaltet LED1_RED aus jmp ABFRAGE_POTI2 ;Sprung zum Programmbeginn LED3_GREEN: setb P2.3 ;Schaltet LED4_GREEN aus clr P2.2 ;Schaltet LED3_GREEN ein setb P2.1 ;Schaltet LED2_YELLOW aus setb P2.0 ;Schaltet LED1_RED aus jmp ABFRAGE_POTI2 ;Sprung zum Programmbeginn LED2_YELLOW: setb P2.3 ;Schaltet LED4_GREEN aus setb P2.2 ;Schaltet LED3_GREEN aus clr P2.1 ;Schaltet LED2_YELLOW ein setb P2.0 ;Schaltet LED1_RED aus jmp ABFRAGE_POTI2 ;Sprung zum Programmbeginn end
Theoretisch sollte jetzt nur Poti1 funktionieren >>>hier das was meiner Meinung nach zu ändern ist ABFRAGE_POTI1: clr MX0 ;Setzt MX0 auf 1 . . . clr P2.6 ;Schaltet LED7_RED ein >>>jmp ABFRAGE_POTI2 ;Sprung zum Programmbeginn genauso ABFRAGE_POTI2: . . . >>>jmp ABFRAGE_POTI1 ;Sprung zum Programmbeginn Gehts jetzt? Wenn nein, was passiert?
wir haben das jetzt mit einer zusatzschleife gelöst. also so funktioniert es eben wenn P0.0 oder P0.1 kommt. deine lösung ist auch nicht schlecht, aber im debugmodus kommt er nur "in einer" stellung zu deiner jmp Abfrage, nämlich wenn die spannung 4.1V (glaube ich, im AINO) gegeben ist. aber das soll immer abgefragt werden. so wie es jetzt steht funktioniert es. ;----------------------------------------------------------------------- - ;Initialisierungsteil fuer allgemeine Konstanten ;----------------------------------------------------------------------- - CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp INIT ; ;----------------------------------------------------------------------- - ;Interrupt-Vektoren ;----------------------------------------------------------------------- - ;ORG ;----------------------------------------------------------------------- - ;Initialisierungsteil fuer On-Chip Peripherie ;----------------------------------------------------------------------- - ORG 100H ;Programmstart bei 100H INIT: mov ADCON,#10000000B ;Kanal AN0 angewaehlt, Stop nach der Wandlung ;----------------------------------------------------------------------- - ;Programmschleife ;----------------------------------------------------------------------- - SCHLEIFE: jnb P0.0,ABFRAGE_POTI1 ;Abfrage von Poti 1 Stellung jnb P0.1,ABFRAGE_POTI2 ;Abfrage von Poti 2 Stellung jmp SCHLEIFE ;Sprung zum Programmbeginn ABFRAGE_POTI1: clr MX0 ;Setzt MX0 auf 1 mov DAPR,#0 ;A/D Wandlung wird durch schreiben in das DAPR-Register ausgelöst. jb BSY,$ ;Warten bis A/D Wandlung stop, BSY beendet die A/D Wandlung mov A,ADDAT ;Das Ergebnis der A/D Wandlung befindet sich im ADDAT-Register clr C ;Carry loeschen subb A,#103 ;entspricht U>2V jc LED4_GREEN_1 ;Sprung da U<=2V subb A,#51 ;entspricht U>3V jc LED5_GREEN ;Sprung da U<=3V subb A,#51 ;entspricht U>4V jc LED6_YELLOW ;Sprung da U<=4V setb P2.3 ;Schaltet LED4_GREEN aus setb P2.4 ;Schaltet LED5_GREEN aus setb P2.5 ;Schaltet LED6_YELLOW aus clr P2.6 ;Schaltet LED7_RED ein jmp SCHLEIFE ;Sprung zum Programmbeginn LED4_GREEN_1: clr P2.3 ;Schaltet LED4_GREEN ein setb P2.4 ;Schaltet LED5_GREEN aus setb P2.5 ;Schaltet LED6_YELLOW aus setb P2.6 ;Schaltet LED7_RED aus jmp SCHLEIFE ;Sprung zum Programmbeginn LED5_GREEN: setb P2.3 ;Schaltet LED4_GREEN aus clr P2.4 ;Schaltet LED5_GREEN ein setb P2.5 ;Schaltet LED6_YELLOW aus setb P2.6 ;Schaltet LED7_RED aus jmp SCHLEIFE ;Sprung zum Programmbeginn LED6_YELLOW: setb P2.3 ;Schaltet LED4_GREEN aus setb P2.4 ;Schaltet LED5_GREEN aus clr P2.5 ;Schaltet LED6_YELLOW ein setb P2.6 ;Schaltet LED7_RED aus jmp SCHLEIFE ;Sprung zum Programmbeginn ABFRAGE_POTI2: setb MX0 ;Setzt MX0 auf 0 mov DAPR,#0 ;A/D Wandlung wird durch schreiben in das DAPR-Register ausgelöst. jb BSY,$ ;Warten bis A/D Wandlung stop, BSY beendet die A/D Wandlung mov A,ADDAT ;Das Ergebnis der A/D Wandlung befindet sich im ADDAT-Register clr C ;Carry loeschen subb A,#103 ;entspricht U>2V jc LED4_GREEN_2 ;Sprung da U<=2V subb A,#51 ;entspricht U>3V jc LED3_GREEN ;Sprung da U<=3V subb A,#51 ;entspricht U>4V jc LED2_YELLOW ;Sprung da U<=4V setb P2.3 ;Schaltet LED4_GREEN aus setb P2.2 ;Schaltet LED3_GREEN aus setb P2.1 ;Schaltet LED2_YELLOW aus clr P2.0 ;Schaltet LED1_RED ein jmp SCHLEIFE ;Sprung zum Programmbeginn LED4_GREEN_2: clr P2.3 ;Schaltet LED4_GREEN ein setb P2.2 ;Schaltet LED3_GREEN aus setb P2.1 ;Schaltet LED2_YELLOW aus setb P2.0 ;Schaltet LED1_RED aus jmp SCHLEIFE ;Sprung zum Programmbeginn LED3_GREEN: setb P2.3 ;Schaltet LED4_GREEN aus clr P2.2 ;Schaltet LED3_GREEN ein setb P2.1 ;Schaltet LED2_YELLOW aus setb P2.0 ;Schaltet LED1_RED aus jmp SCHLEIFE ;Sprung zum Programmbeginn LED2_YELLOW: setb P2.3 ;Schaltet LED4_GREEN aus setb P2.2 ;Schaltet LED3_GREEN aus clr P2.1 ;Schaltet LED2_YELLOW ein setb P2.0 ;Schaltet LED1_RED aus jmp SCHLEIFE ;Sprung zum Programmbeginn end
Ja kein Problem, du musst nicht danke sagen. Mann, sind das nette Leute hier!!!
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.