Hi, also ich bin ein absoluter Neuling in Sachen PIC dass erst mal vorraus. Ich muss als abschlussprojekt für meine Schule ein Thermometer bauen. So ich habe einen BCD zu 7Segment Decoder den SN74LS47N und 3-7Segment Anzeigen mit gemeinsamer Anode die über 3 Transistoren geschaltet werden dies ist kein Problem.Mein Problem ist es das ich nicht weiss wie ich den SN74LS47N ansteuern wegen dem HIGH und LOW wenn ich nach der Tabelle aus dem Datenblatt gehe bekomme ich nichts gescheites dabei herraus! Kann mir bitte jemand von euch helfen? mfg schally
Du musst /LT, /RBI und /BI auf log. 1 (high) setzen. a..g an die Kathoden der 7-Segment-Anzeigen, An A..D legst Du die Daten. Und natürlich VCC und GND anschliessen. Viel Spass Severino
Severino R. wrote: > Du musst /LT, /RBI und /BI auf log. 1 (high) setzen. > a..g an die Kathoden der 7-Segment-Anzeigen, > An A..D legst Du die Daten. > Und natürlich VCC und GND anschliessen. > > Viel Spass > > Severino Kann ich also einfahc hingehn und /LT, /RBI und /BI einfahc an GND anschliessen müsste doch auch gehn oder? mfg schally
Nein, die musst Du eben auf z.B. +5V legen. High = logisch 1 = +5V (VCC) Low = logisch 0 = 0V (GND) Alles klar? Severino
Severino R. wrote: > Nein, die musst Du eben auf z.B. +5V legen. > > High = logisch 1 = +5V (VCC) > Low = logisch 0 = 0V (GND) > > Alles klar? > > Severino Hi, danke erstmal . Ich melde mich gleich wieder.;-) mfg schally
So habe nun die netsprechenden Pins an +5V gelötet. aber wenn ich eine 1 senden will mit dem Assemblerbefehl BSF IA ;Dezimal 1 sendet er mir nichts ! mfg schally ps: ; RB,0 --> BCD/7 Segement Decoder Eingang IA * ; RB,1 --> BCD/7 Segement Decoder Eingang IB * ; RB,2 --> BCD/7 Segement Decoder Eingang IC * ; RB,3 --> BCD/7 Segement Decoder Eingang ID * ; RB,4 --> BCD/7 Segement Decoder Eingang LT * ; RB,5 -->Transistor 1 für Anzeige 1 zu schalten * ; RB,6 -->Transistor 2 für Anzeige 2 zu schalten * ; RB,7 -->Transistor 3 für Anzeige 3 zu schalten * ;*********************************************************************** ********
Du solltest schon etwas mehr als nur eine Instruktion Deines Programms posten, da so nicht ersichtlich ist, was IA ist. Ausserdem setzt bsf nur ein einzelnes Bit. Du musst aber vier Bits setzen. Hast Du Dein Port richtig initialisiert? Und schliesslich ist ein Schema nützlich, um zu sehen, wohin Deine Bits gelangen. Severino
1 | ; ****************************************************************************** |
2 | ; * Thermometer.asm - Abschlussprojekt HBFI05a von Steffen Schalhorst * |
3 | ; ****************************************************************************** |
4 | ; Mit Hilfe des PIC-Mikrocontroller 16F84A soll mit Hilfe des 1-Wire * |
5 | ; Sensors DS18S20 ein Thermometer aufgebaut werden. * |
6 | ; Der PIC bekommt die Daten über den Port RA,0. * |
7 | ; Die gemessenen Werte werden BCD codiert und an einen BCD/7-Segement * |
8 | ; Decoder gesendet der diesen Wert an die Entsprechenden Anzeigen sendet * |
9 | ; die nacheinander Eingeschaltet werden. * |
10 | ; ****************************************************************************** |
11 | ; EINGÄNGE: * |
12 | ; * |
13 | ; RA,0 --> 1-Wire Sensor DS18S20 * |
14 | ; RA,1 --> Taster 1 Höchste Temp. * |
15 | ; RA,2 --> Taster 2 Niedrigste Temp. * |
16 | ; ****************************************************************************** |
17 | ; AUSGÄNGE: * |
18 | ; * |
19 | ; RB,0 --> BCD/7 Segement Decoder Eingang IA * |
20 | ; RB,1 --> BCD/7 Segement Decoder Eingang IB * |
21 | ; RB,2 --> BCD/7 Segement Decoder Eingang IC * |
22 | ; RB,3 --> BCD/7 Segement Decoder Eingang ID * |
23 | ; RB,4 --> BCD/7 Segement Decoder Eingang LT * |
24 | ; RB,5 -->Transistor 1 für Anzeige 1 zu schalten * |
25 | ; RB,6 -->Transistor 2 für Anzeige 2 zu schalten * |
26 | ; RB,7 -->Transistor 3 für Anzeige 3 zu schalten * |
27 | ;******************************************************************************* |
28 | |
29 | ;******************************************************************************* |
30 | ;* Bestimmung des Prozessortyps für den Assembler und das Programmiergerät * |
31 | ;******************************************************************************* |
32 | LIST p=16F84A |
33 | ;******************************************************************************* |
34 | ;* Includedatei für den 16F84A einbinden (vordef. Reg. und Konst.) * |
35 | ;******************************************************************************* |
36 | |
37 | #include <p16f84A.INC> |
38 | |
39 | ; Diese Datei enthält Vordefinitionen für wichtige Register und Konstanten. |
40 | ; (Z.B. gibt es die Konstante PORTB mit der sich ohne Angabe der |
41 | ; absoluten Adresse H'0006' der Port B des Prozessors ansprechen lässt) |
42 | |
43 | |
44 | ;******************************************************************************* |
45 | ;* Konfigurationseinstellungen für IC-Prog vordefinieren * |
46 | ;******************************************************************************* |
47 | |
48 | __CONFIG _PWRTE_ON & _CP_OFF & _HS_OSC & _WDT_OFF |
49 | |
50 | ; Hier werden verschiedene Prozessoreigenschaften festgelegt: |
51 | ; PWRTE_ON schaltet den Power Up Timer ein, d.h. der Prozessor wartet nach |
52 | ; dem Einschalten ca. 70ms mit dem Programmstart, um sicher zu sein, |
53 | ; dass alle angeschlossene Peripherie bereit ist. |
54 | ; CP_OFF schaltet die Code-Protection des Prozesors aus. Damit ist das im Prozessor |
55 | ; befindliche Programm jederzeit auslesbar und überschreibbar. |
56 | ; HS_OSC spezifiziert einen Quarzoszillator (Highspeed) als Zeitbasis für den Prozessor. |
57 | ; WDT_OFF schaltet den Watchdog-Timer des Prozesors aus. |
58 | |
59 | |
60 | ;******************************************************************************* |
61 | ;* Register / Variablen festlegen * |
62 | ;******************************************************************************* |
63 | ; hier werden Adressen von Registern / Variablen festgelegt. Diese werden beginnend |
64 | ; mit der Adresse H'20' aufsteigend vergeben. |
65 | CBLOCK H'20' |
66 | sensor ; Variable wird benutzt um den ausgelesenen ByteCode vom Sensor geschrieben |
67 | bcd_wert ; Variable in den der Umgewandelte Wert von Sensor geschrieben wird |
68 | |
69 | wait |
70 | wait_1 |
71 | wait_2 |
72 | |
73 | |
74 | ENDC |
75 | ;******************************************************************************* |
76 | ;* Konstanten festlegen * |
77 | ;******************************************************************************* |
78 | |
79 | ; Hier sollten alle im Verlauf des Programms verwendeten Konstanten deklariert werden. |
80 | ; Die Deklaration sieht z.B. folgendermaßen aus: |
81 | |
82 | ;******************************************************************************* |
83 | ;* Definition von einzelnen Bits in einem Register / in einer Variable * |
84 | ;******************************************************************************* |
85 | ; hier kann mit Hilfe der #DEFINE Direktive einzelnen Bits in einem Register ein |
86 | ; Name zugewiesen werden. |
87 | ; Eine Definition sieht z.B. folgendermaßen aus: |
88 | ; |
89 | ;******************************************************************************* |
90 | ;* Name * Port * Bedeutung / Funktion * |
91 | ;******************************************************************************* |
92 | #DEFINE Sensor PORTA,0 ;Anschluss für 1-Wire Sensor |
93 | #DEFINE TH PORTA,1 ;Taster für höchste Temperatur -->TH =Temp High |
94 | #DEFINE TL PORTA,2 ;Taster für niedrigste Temperatur -->TL =Temp Low |
95 | ;******************************************************************************* |
96 | #DEFINE IA PORTB,0 ;BCD Decoder Eingang IA |
97 | #DEFINE IB PORTB,1 ;BCD Decoder Eingang IB |
98 | #DEFINE IC PORTB,2 ;BCD Decoder Eingang IC |
99 | #DEFINE ID PORTB,3 ;BCD Decoder Eingang ID |
100 | ;******************************************************************************* |
101 | #DEFINE T1 PORTB,7 ;Transistor T1 --> Für Anzeige 1 |
102 | #DEFINE T2 PORTB,6 ;Transistor T2 --> Für Anzeige 2 |
103 | #DEFINE T3 PORTB,5 ;Transistor T3 --> Für Anzeige 3 |
104 | #DEFINE bank1 STATUS, RP0 ;Spezielle Register Bank |
105 | ;******************************************************************************* |
106 | ;******************************************************************************* |
107 | ;* Programmstart * |
108 | ;******************************************************************************* |
109 | ORG H'00' ; Das Programm wird ab Speicherstelle 0 in den Speicher geschrieben |
110 | GOTO init ; Springe zur Grundinitialisierung der Ports A und B |
111 | ;******************************************************************************* |
112 | ;* Initialisierung * |
113 | ;******************************************************************************* |
114 | init BSF bank1 ; wechsle zu Registerbank 1 (spezielle Register) |
115 | MOVLW B'00011111' |
116 | MOVWF TRISA ; RA0 .. RA4 Eingänge |
117 | MOVLW B'00000000' |
118 | MOVWF TRISB ; RB0-RB7 Ausgänge |
119 | BCF bank1 ; wechsle zu Registerbank 0 (normaler Speicherbereich) |
120 | |
121 | CLRF PORTA ; Port A löschen |
122 | CLRF PORTB ; Port B löschen |
123 | |
124 | ; Die Register TRISA und TRISB legen fest, welche Bits in den jeweiligen Ports Ein- bzw. |
125 | ; Ausgänge sind. Eine '1' an der entsprechenden Stelle setzt das Bit des Ports als Ein- |
126 | ; gang eine '0' setzt das Bit als Ausgang. |
127 | ;******************************************************************************* |
128 | ;* Hauptprogramm * |
129 | ;******************************************************************************* |
130 | main |
131 | BSF T3 |
132 | BSF IA |
133 | |
134 | |
135 | |
136 | |
137 | |
138 | |
139 | |
140 | |
141 | |
142 | ;******************************************************************************* |
143 | ;* Unterprogramme * |
144 | ;******************************************************************************* |
145 | |
146 | |
147 | |
148 | UP_wait1s |
149 | ;4999993 cycles |
150 | movlw 0x2C |
151 | movwf wait |
152 | movlw 0xE7 |
153 | movwf wait_1 |
154 | movlw 0x0B |
155 | movwf wait_2 |
156 | UP_wait1s_0 |
157 | decfsz wait, f |
158 | goto $+2 |
159 | decfsz wait_1, f |
160 | goto $+2 |
161 | decfsz wait_2, f |
162 | goto UP_wait1s_0 |
163 | |
164 | ;3 cycles |
165 | goto $+1 |
166 | nop |
167 | |
168 | ;4 cycles (including call) |
169 | return |
170 | |
171 | END |
so hier mal der Code ich muss ja nur ein Bit setztn da die andern ja automatisch auf null sind oder? falls nicht wie setzte ich es auch 0? Datenblatt des BCD Decoders http://www.ortodoxism.ro/datasheets2/c/0g2l9c1e4yo8otekcu2hwgj0hrcy.pdf mfg schally
Die Ports sind nicht automatisch auf null, aber Du setzt sie ja selber auf null. Mir fällt nichts Seltsames auf, es müsste ja funktionieren. Etwas allerdings: Du solltest am Schluss von Deinem main, vor dem Unterprogramm, einen Sprung auf sich selber oder auf main einfügen, da sonst das Programm durchläuft und wohl wieder von Anfang an startet, dabei die Ports wieder auf 0 setzt etc. Kannst Di mit einem Oszi schauen, was RB0 ausgibt? Severino
Hi, habe leider kein Oszi... So ich werde nun nochmal dieses Board nochmal neu löten... mfg schally
Du kannst Dein Programm auch im MPLAB SIM Simulator laufen lassen und dann in Watch-Fenster schauen, was RB0 ausgigt. Wenn es hier stimmt, liegt das Problem wahrscheinlich an der Hardware. Severino
Ok werde mir dieses TOOL mal runterladen und schauen was es ausgibt! mfg schally
MPLAB SIM ist in MPLAB integriert. Ich nehme jetzt mal an, dass Du mit MPLAB arbeitest. Jedenfalls kennen ich für Assembler-Programmierung von PICs nichts Besseres. Menü Debugger -> Select Tool -> MPLAB SIM Severino
wie seh ich das was der macht? mfg schally kannst du vvl nicht mal schauen?
Also, in MPLAB SIM werden die Bits korrekt gesetzt. Beiliegend das fertige Projekt mit Watch-Fenster und gesetztem Breakpoint. Du öffnest den Workspace (File->Open Workspace), drückst anschliessend F9 um das Programm zu starten, dann sieht Du, dass er an die erste Instruktion in main springt. Nun kannst Du mit F7 Schritt für Schritt durch Dein Programm gehen und im Watch-Fenster das PORTB beobachten, wie es sich verändert. Am besten in der Spalte "Binary". Viel Spass Severino
ok dann muss es wohl an der Hardware liegen also später nochmal schauen ob ich was vergessen hab usw... Thx erstmal meld mich nochmal mfg schally
So mein Probwar das ich an den OC Ausgängen des ULN2803 gehangen habe und nicht direkt am PIC. und wie schalte ich die Transistoren jetzt aus? weil ich lade MOVLW B'0001';Zahl 1 ins W-Register laden MOVWF PORTB ;Gebe diese jetzt aus ps:hier mal en vid http://steffen-schalhorst.de/HBFI_05c/Abschlussprojekt/Video/Zaehler.AVI mfg schally
Steffen S. wrote: > So mein Probwar das ich an den OC Ausgängen des ULN2803 gehangen habe > und nicht direkt am PIC. Davon hast Du aber nichts erwähnt. > > und wie schalte ich die Transistoren jetzt aus? welche jetzt: die einzelnen im Video oder die im ULN2803 ? > weil ich lade > > MOVLW B'0001';Zahl 1 ins W-Register laden > MOVWF PORTB ;Gebe diese jetzt aus Versuch mal: MOVLW B'0000' ; 1 = ein; 0 = aus (?!) MOVWF PORTB > > ps:hier mal en vid > http://steffen-schalhorst.de/HBFI_05c/Abschlussprojekt/Video/Zaehler.AVI Toll, danke für den Feedback. Es funktioniert ja! Severino
Hi, hier der Schaltplan http://steffen-schalhorst.de/HBFI_05c/Abschlussprojekt/ATINF/Schaltplan/pic_thermo.pdf Transistoren BC557C PNP. Funzt auch net weil dann zeigt er mir die 000 an (wegen den 3 7Segment Anzeigen) mfg schally
Mir stellt sich die Frage, warum man überhaupt so einen uralt 7447 TTL-Chip an nen MC dranpappen sollte ? So ein kleines bischen Tabellenzugriff von Ziffer auf 7-Segment-Code sollte doch sogar auch ein PIC schaffen. Wenns nur ums Pin sparen geht, würde ich nen 74HC164 dranpappen (2 -> 8 Pins). Peter
Steffen S. wrote: > Funzt auch net weil dann zeigt er mir die 000 an (wegen den 3 7Segment > Anzeigen) Und was ist daran nicht gut? Kannst Du bitten etwas klarer darstellen, was Du wie erreichen willst, und was stattdessen geschieht? Im Übrigen hat Peter Dannegger schon recht, warum überhaupt den 7447? Severino
@ schally Steffen S. wrote: [..] > Mein Problem ist es das ich nicht weiss wie ich > den SN74LS47N ansteuern wegen dem HIGH und LOW wenn ich nach der Tabelle > aus dem Datenblatt gehe bekomme ich nichts gescheites dabei herraus! > > Kann mir bitte jemand von euch helfen? > > mfg > schally und jetzt > weil ich den in der schule behandelt habe... Du hast ihn in der Schule behandelt und weisst nicht, wie Du ihn ansteuern sollst??? Jedenfalls: Funktioniert nun Dein Projekt? Severino
Noch nicht ganz habe noch etliche Problme mit dem Ansteuern des 1-Wire Sensors DS18S20.... hat vvl jemand en guten Link dazu wo das mal ein bissjen erklärt wird? mfg schally
hier vielleicht: http://elektronik.kai-uwe-schmidt.de/index.php?page=pic_thermometer oder hier mit C-Sourcecode: http://wiki.atrox.at/index.php/Simple_1wire_PIC_Program
Severino R. wrote: > hier vielleicht: > http://elektronik.kai-uwe-schmidt.de/index.php?page=pic_thermometer > > oder hier mit C-Sourcecode: > http://wiki.atrox.at/index.php/Simple_1wire_PIC_Program hi darauf bin ich auch schon gestossen aber ich bekomme es einfach nicht hin... mfg schally
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.