hi leutz ich hab folgendes problem. ich wollte ein problem mit einem PIC16F84A lösen. Das Programm ist geschrieben und gebrannt, aber der PIC macht nichts. mein programm soll folgendes tun:in einem wartezimmer einer arztpraxis soll eine anzeige angebracht weden, wo angezeigt wird, wie viele personen sich zur zeit in dem raum befinden. eine lichtschranke (1) liest die personen ein, die in den raum kommen, eine andere lichtschranke (2) liest die personen ein, die den raum über eine andere tür verlassen. mein prog sieht wie folgt aus: =============================================== list p=16f84 ;********************************* ; Pinbelegung ; ----------- ; PortA ; 0 Lichtschranke 1 ; 1 Lichtschranke 2 ; 2 nc ; 3 nc ; ; PortB ; 0 ULN 2803 Pin1 (LED B1) ; 1 ULN 2803 Pin2 (LED B2) ; 2 ULN 2803 Pin3 (LED B3) ; 3 ULN 2803 Pin4 (LED B4) ; 4 ULN 2803 Pin5 (LED B5) ; 5 ULN 2803 Pin6 (LED B6) ; 6 ULN 2803 Pin7 (LED B7) ; 7 ULN 2803 Pin8 (LED B8) ;********************************* #include <P16f84.INC> ;************************ main MOVLW 0x00 ; Startwert 0 MOVWF 0X0C ; 0 speichern in Zählregister BCF 0x03,0x05 ; Umschalten auf BANK 0 CLRF 0x05 ; Der Inhalt von PORTA wird gelöscht BSF 0x03,0x05 ; Umschalten auf BANK 1 MOVLW 0x03 ; MOVWF 0x05 ;PORTA initialisieren BCF 0x03,0x05 ;Umschalten auf BANK 0 CLRF 0x06 ;PORTB wird gelöscht BSF 0x03,0x05 ;Umschalten auf BANK 1 MOVLW 0x00 ; MOVWF 0x06 ;PORTB initialisieren BCF 0x03,0x05 ;Umschalten auf BANK 0 anfang: ;LABEL anfang MOVF 0x05,0 MOVWF 0x1B ;PORTA in 1B speichern DECFSZ 0x1B,1 GOTO zwei ;springe zu kommen, wenn 1B null ist. ansonsten springe zu zwei GOTO kommen zwei: DECFSZ 0x1B,1 GOTO drei ;springe zu gehen, wenn 1B null ist. ansonsten springe zu drei GOTO gehen drei: DECFSZ 0x1B,1 ;da der fall drei nur dann eintritt, wenn jemand kommt und gleichzeitig einer geht, wird zum anfang gesprungen NOP GOTO anfang kommen: INCF 0x0C,1 ;es kommt einer in den raum. also wird 0C incrementiert MOVF 0x0C,0 MOVWF 0x06 ;der wert von 0C wird an PORTB ausgegeben GOTO anfang gehen: DECF 0x0C,1 ;es geht einer aus dem raum. also wird 0C decrementiert MOVF 0x0C,0 MOVWF 0x06 ;der wert von 0C wird an PORTB ausgegeben GOTO anfang END ============================================ nun macht der aber gar nichts. selbst einfache programme, wie 0xFF einlesen und an einem PORT ausgeben macht er nicht. was ist daran falsch oder wo kann ein eventueller fehler liegen? mfg t-phyte
- CONFIGs / Fuses prüfen (am besten gleich im ASM festlegen und nochmals vor dem prommen prüfen, falls du einen selbstgebauten Prommer benutzt) - Oszillator überprüfen Beispiel wie man die CONFIGs / Fuses einstellt #INCLUDE P16F84A.INC PROCESSOR PIC16F84A __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
Hallo zusammen. Sitze zusammen mit tobi an dem problem und kann nur sagen, dass es ein Problem AUSSERHALB der Programmiererei ist.. Habe folgendes Demo Programm eingeladen: list p=16f84 ;************************************************************** ;* ;* Pinbelegung ;* ---------------------------------- ;* PORTA: 0 ;* 1 ;* 2 ;* 3 ;* 4 ;* PORTB: 0 LED ;* 1 LED ;* 2 LED ;* 3 LED ;* 4 LED ;* 5 LED ;* 6 LED ;* 7 LED ;* ;************************************************************** ; ; sprut (zero) Bredendiek 05/2000 (mod. am 16.01.2002) ; ; Lauflicht am Port B ; ; Taktquelle: 4MHz ; ;************************************************************** ; Includedatei für den 16F84 einbinden ; #include <P16f84.INC> ; ; Configuration festlegen ; ; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator __CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC ; ; ab 4 MHz: Power on Timer, kein Watchdog, HS-Oscillator ; __CONFIG _PWRTE_ON & _WDT_OFF & _HS_OSC ; ;************************************************************** ; Variablennamen vergeben ; loops Equ 0x22 ; Zähler für Warteschleife loops2 Equ 0x23 ; Zähler für Warteschleife ;************************************************************** ; los gehts mit dem Programm ; Port B auf Ausgabe stellen Init bsf STATUS, RP0 ; auf Bank 1 umschalten movlw B'00000000' ; PortB alle output movwf TRISB bcf STATUS, RP0 ; auf Bank 0 zurückschalten clrf PORTB ; alle LEDs ausschalten ; 1. LED einschalten bsf PORTB,0 ; LED an RB0 einschalten ; Lauflicht Loop call Wait ; Wartezeit rlf PORTB,f ; laufen zur nächsten LED goto Loop ;********************************************************** ; Warteschleife 250 ms Wait movlw D'250' ; 250 ms Pause movwf loops Wai movlw .110 ; Zeitkonstante für 1ms movwf loops2 Wai2 nop ; nop nop nop nop nop decfsz loops2, F ; 1 ms vorbei? goto Wai2 ; nein, noch nicht ; decfsz loops, F ; 250 ms vorbei? goto Wai ; nein, noch nicht retlw 0 ; das Warten hat ein Ende end Es sollte eigentlich 100 % ig laufen - tuts aber nich ;-) Was muss ich auf meiner Platine beachten ? Hab +5V, das 4 Mhz Quartz und die LEDS am PORT B ngeschlossen, das sollte reichen, oder ? Hab ich was vergessen ? Bitte antwortet !!!
Hallo, @tobi fing. (t-phyte) @Dominik Tünnerhoff - tuennerhofftrbk-schueler.de Habt ihr diese beiden Zeilen irgentwo definiert? org 00 goto START org 04 goto InterruptRoutine Habt íhr überhaupt schonmal einen pic verwendet!? welchen brenner welche software usw... infos zu brennern und software bei www.sprut.de bei euren programmen beginnt ihr bei main oder Init.... woher soll der pic wissen das das euer programmanfang ist speziell an: tobi fing. (t-phyte) was ist wenn einer zu der tür reingeht zu der er reingekommen ist (zwei lichtschranken mit richtungserkennung!?) Maddin ps.: habe eure programme nicht weiter durchgesehen - vielleicht hilft das aber schon..
ach ja, mit dem befehl org. legt ihr fest an welcher adresse im speicher des pics dieser programmcode liegen soll. nun springt der pic bei einem reset oder beim einschalten an die stelle 0x00 im speicher - wenn dort nicht steht was er machen soll dann... bei einem interrupt geht er immer an stelle 0x04, dort müsstet ihr euren interrupthandler implementieren oder diesen eintrag auskommentiert lassen wenn ihr keine interrups nutzt... maddin
Programmupdate bislang: list p=16F84A #include <p16F84.inc> PORTA equ 0x05 PORTB equ 0x06 STATUS equ 0x03 RP0 equ 0x05 TRISA equ 0x85 TRISB equ 0x86 REG1 equ 0x1B main MOVLW 0x00 ; Startwert 0 MOVWF 0x0C ; 0 speichern in Zählregister BCF STATUS, RP0 ; Umschalten auf BANK 0 ; CLRF 0x05 ; Der Inhalt von PORTA wird gelöscht BSF STATUS, RP0 ; Umschalten auf BANK 1 MOVLW 0x03 ; Konstante nach W laden PORTINITA BCF STATUS, RP0 ;Portinitialisierung Port A CLRF PORTA BSF STATUS, RP0 MOVLW 0x03 ;Definiert als 2 - Bit MOVWF TRISA ;Definiert als Eingang PORTINITB BCF STATUS, RP0 ;Portinitialisierung Port B CLRF PORTB BSF STATUS, RP0 MOVLW 0x00 ;Definiert als 8-Bit MOVWF 0x86 ;Definiert als Ausgang BCF STATUS, RP0 ;Umschalten auf BANK 0 anfang: MOVF PORTA,0 MOVWF REG1 ;PORTA in 1B speichern DECFSZ REG1,1 ;springe zu kommen, wenn 1B null ist. ansonsten springe zu zwei GOTO zwei GOTO kommen zwei: DECFSZ REG1,1 ;springe zu gehen, wenn 1B null ist. ansonsten springe zu drei GOTO drei GOTO gehen drei: DECFSZ REG1,1 ;da der Fall drei nur dann eintritt, wenn Jemand kommt und gleichzeitig Einer geht, wird zum Anfang gesprungen NOP GOTO anfang kommen: INCF 0x0C,1 ;es kommt einer in den raum. also wird 0C incrementiert MOVF 0x0C,0 MOVWF 0x06 ;der wert von 0C wird an PORTB ausgegeben GOTO anfang gehen: DECF 0x0C,1 ;es geht einer aus dem raum. also wird 0C decrementiert MOVF 0x0C,0 MOVWF 0x06 ;der wert von 0C wird an PORTB ausgegeben GOTO anfang END Hoffentlich ist es bislang zumindest klarer was passiert ;-) Die von dir genennaten zeilen haben wir nicht, was bewirken sie ? Ist der Erste PIC, der uns auch scheinbar über den Kopf wächst :-) Danke für Hilfe !!! Tobis Frage kann ich auch eben beantworten: http://www.trbk-schueler.de/ - Übersichtsplan der Praxis
Sorry, hab den 2ten eintrag noch nicht gehabt als du geantwortet hast. Leider versteh ich das aber auch noch nicht so wirklich: Das soll jetzt quasi direkt an den anfang, oder ? bei einem interrupt geht er immer an stelle 0x04, dort müsstet ihr euren interrupthandler implementieren oder diesen eintrag auskommentiert lassen wenn ihr keine interrups nutzt...
Also so: list p=16F84A #include <p16F84.inc> org 00 goto START org 04 goto main START PORTA equ 0x05 PORTB equ 0x06 STATUS equ 0x03 RP0 equ 0x05 TRISA equ 0x85 TRISB equ 0x86 REG1 equ 0x1B main MOVLW 0x00 ; Startwert 0 MOVWF 0x0C ; 0 speichern in Zählregister BCF STATUS, RP0 ; Umschalten auf BANK 0 ; CLRF 0x05 ; Der Inhalt von PORTA wird gelöscht BSF STATUS, RP0 ; Umschalten auf BANK 1 MOVLW 0x03 ; Konstante nach W laden PORTINITA BCF STATUS, RP0 ;Portinitialisierung Port A CLRF PORTA BSF STATUS, RP0 MOVLW 0x03 ;Definiert als 2 - Bit MOVWF TRISA ;Definiert als Eingang PORTINITB BCF STATUS, RP0 ;Portinitialisierung Port B CLRF PORTB BSF STATUS, RP0 MOVLW 0x00 ;Definiert als 8-Bit MOVWF 0x86 ;Definiert als Ausgang BCF STATUS, RP0 ;Umschalten auf BANK 0 anfang: MOVF PORTA,0 MOVWF REG1 ;PORTA in 1B speichern DECFSZ REG1,1 ;springe zu kommen, wenn 1B null ist. ansonsten springe zu zwei GOTO zwei GOTO kommen zwei: DECFSZ REG1,1 ;springe zu gehen, wenn 1B null ist. ansonsten springe zu drei GOTO drei GOTO gehen drei: DECFSZ REG1,1 ;da der Fall drei nur dann eintritt, wenn Jemand kommt und gleichzeitig Einer geht, wird zum Anfang gesprungen NOP GOTO anfang kommen: INCF 0x0C,1 ;es kommt einer in den raum. also wird 0C incrementiert MOVF 0x0C,0 MOVWF 0x06 ;der wert von 0C wird an PORTB ausgegeben GOTO anfang gehen: DECF 0x0C,1 ;es geht einer aus dem raum. also wird 0C decrementiert MOVF 0x0C,0 MOVWF 0x06 ;der wert von 0C wird an PORTB ausgegeben GOTO anfang END
benutzt ihr interupts!? warum denn die zeile org. 0x04 lest ihr denn auch aufmerksam!? eigentlich sollte die letzte frage überflüssig sein, aber... nein, ich braucht nur org. 0x00 goto main wie schon geschrieben und erklärt org. 0x04 goto isr ist für interrupts ach ja die deklaration der variablen würde ich von der reihenfolge her eher vor dem org machen... maddin. ps.: ich würde mit einem einfachen programm starten - lasst lieber erstmal eine led blinken....
Ja gut, habs JETZT kapiert ! So halb zumindest... Interrupts sind ?! goto isr ?! ich hab kein Label namens isr... Im Prinzip müsste ich noch das org. 0x00 vor main setzen, womit a) der Sprung nach main überflüssig ist (steht ja schon davor) und steht damit b) nach den variablen, oder habich jetzt was verpeilt ? Einfaches Programm: Gerne, aber selbst ne Demo von www.sprut.de kriegen wir nicht ans Laufen :-( Kann dir gleich mal nen Foto unserer Testplatine hochladen, ist dann www.trbk-schueler.de/pic/test1.jpg und www.trbk-schueler.de/pic/test2.jpg Schätze so in 20 Minuten, hab atm kein FTP Login...
die links gingen bisher alle einschließlich diesem nicht. ich ahbe hier jetzt nochmal ein kleines testprogramm zusammengestrickt, leider kann ich es zur zeit nicht testen, aber es sollte funktionieren, vielleicht wird daraus die struktur etwas klarer... wie gesagt, ich habe das jetzt an eure problematik angelehnt... list p=16F84A #include <p16F84.inc> VARIABLEA_A EQU 0x0C ;0x0c absolute erste ram zelle VARIABLEA_B EQU 0x0D org 00 goto INIT ; org 04 ; goto ISR INIT bsf status,5 ;Wechsel zu Bank1 bcf status,6 movlw b'11111111' ;PortB 'IN' or 'OUT' movwf trisb ;1=IN ; 0=OUT movlw b'00000000' ;PortB 'IN' or 'OUT' movwf trisa ;1=IN ; 0=OUT ; bcf option_reg,7 ;Pull-UP PortB enable bcf status,5 ;Wechsel zu Bank 0 bcf status,6 goto START ;=================Hauptprogramm============================= START movf PORTB,w movwf PORTA goto START maddin ps.: ich arbeite immer auf bank 1, könnte bei euch auch noch zu prblemen führen - auf bankwechsel achten die label könnt ihr allesamt benutzt, wenn ihr die .inc richtig eingebunden habt... meine ich wie gesagt, euer programm habe ich nicht durchgesehen, ist ohne label auch schon eine bestrafung. würde das mal kommentieren, und etwas in segmente unterteilen, den code so zu schreiben ist eine bestrafung für jeden der euch helfen soll und später auch für euch selbst, bei der fehlersuche :-)
zu den links: es muss bmp am ende heissen, sorry aber die hat wer anders für mcih eingescannt, daher die probleme des dateiformats: Ich scan immer in JPG, er in BMP... naja, da siehste erstmal was... Deinen Programmcode kann ich mir leider erst später anschauen, da ich jetzt zur pause MUSS .... Anordnung von oben...
Wieso ? Sind doch labels drinne ! Hab das Programm als ASM File mal an diesen Beitrag drangehängt, damit sollte niemand gestraft werden ;-) Hab da jetzt schon deine Versioon eingebaut, ich hoffe richtig ;-) Soweit so gut, das mit den Links tut mir leid, muss die Domain neu konfigurieren... kotz
'Ehrlich ? Ich bin Schüler und hab hier aussm Datenblatt die befehlsliste, denk dir deine Antwort ;-) Auch wenn ich nicht so wirklich der Pro bin hoffe ich weiter auf deine klasse Hilfe !
...allein mit zusammenkopieren und nicht lesen, ist sowas aber leider nicht getan... wenn du dir das programm auch nur ein wenig angesehen hättest, hättest du erkannt das es in sich abgeschlossen ist. es spiegelt den portb nach porta, aber wenn du nichtmal das siehst, dann frage ich mich woher der restliche code herkommt, oder ob du einfach nur unaufmerksam bist. du solltest das kleine programm mal für sich allein in deinen pic bekommen, und gucken ob das was du an portb anlegst, wieder auf porta ausgegeben wird... bis dahin, alles gute maddin
also ich wollte mich auch noch mal melden. es funktioniert nichts. selbst ein einfaches programm wie dieses: =============================================== list p=16f84 #include <P16f84.INC> ORG 00 GOTO init ;************************ init: BCF 0x03,0x05 BCF 0x03,0x06 ;umschalten auf BANK 0 CLRF 0x06 ;inhalt von PORTB wird gelöscht BSF 0x03,0x05 BCF 0x03,0x06 ;umschalten auf BANK 1 MOVLW 0x00 MOVWF 0x06 ;PORTB initialisieren BCF 0x03,0x05 ;Umschalten auf BANK 0 GOTO main ;__________________Hauptprogramm___________________ main: MOVLW 0xFF ;Das Bitmuster 11111111 wird geladen MOVWF 0x06 ;Das Bitmuster wird an PORTB ausgegeben GOTO main end ============================================== funktioniert nicht. im MPLAB lässt es sich fehlerfrei simulieren. normalerweise müsste an PORTB ein dauerhaftes h-signal an allen bitstellen rauskommen. aber es funktioniert nicht. an allen PINs von PORTB messen wir 0V. somit kann auch nichts an den LEDs zur anzeige gebracht werden. kann es am quarz liegen? es schwingt aber. weitere infos: quarz: 4mhz PIC: 16F84A Brenner: PICSTART plus über weitere hilfe wüden wir uns sehr freuen. mfg tobi
Hallo Tobi, Miss dochmal die Spannung an PIN 4 ( /MCLR ), könnte sein, dass der PIC nach dem Proggen im Reset bleibt. Gruss digger
Hey digger ! Es gibt da nen Prob: Der Pin ist nicht belegt ;-) Was soll er kriegen ? HIGH Pegel oder ? Hab mal gehört, dass ICs generell HIGH interpretieren wenn nix angeschlossen ist, is doch so, oder ?! Ich bin inzwischen (durch maddins Hilfe) soweit das ich das dingen scheinbar komplett NEU programmieren werde. Das ganze ist quasi ne Facharbeit und muss zu allem Ärger eigentlich morgen 16:15 fertig sein, aber das kann ich knicken. Hab Aufschub bis Mittwoch bekommen und da es ja hier den maddin gibt, der meint ich würd nur kopieren und einfügen, schreib ich komplett neu. Mal ne Frage ans Plenum: Was hab ich oben falsch gemacht ? Ich find einfach nix !!! Abgesehen von maddins (mir leider nicht verständlichen) Vorschlägen hab ich nämlich nix kopiert... Ich hoffe ihr haltet mich jetzt nicht für bekloppt oder sowas, aber ich möchte gerne eine Aufgabe zu Ende bringen und über den PIC was lernen. BITTE HELFT UNS WEITERHIN, AUCH WENN WIR NICH SO FIX KAPIEREN WOVON IHR ALTEN HASEN SPRECHT ;-) ;-) Soweit mein Part, schönen Abend noch, Dominik
Wobei "Pullup" bedeutet - der Widerstand muss mit einem seiner beiden Drähte an MCLR und mit dem anderen an VDD bzw. 5V angschlossen werden.
das mit dem 10k widerstand haben wir dann auch am ende des heutigen tages gemerkt. aber nach der änderung ist meines wissens auch nichts brauchbares rausgekommen. am besten wir hängen mal morgen ein bild vom stromlaufplan. vielleicht bringt euch (somit auch uns) das ja dann weiter. mfg tobi
Unser stromlaufplan :-) Ausserdem at bob komplett recht: Das mit der 10K Geschichte haben wir jetzt auch schon durch...
Für IC3 steht zwar keine Bezeichnung dran, sieht aber von der Pinbelegung aus wie ein ULN2803 oder 2804. Nuuuur .... 2803 hat "open collector" Ausgänge und ist daher nicht in der Lage Strom für die LEDs zu liefern. Damit sie leuchten müssen die LEDs mit Anode an +5V und mit Katode über einen Widerstand (hier 330 Ohm) an den zugehörigen Ausgang des 2803.
> BCF 0x03,0x06 Nur als Tip, obige Zeile sollte man besser so schreiben: BCF STATUS, RP1 So hat auch jemand die Chance den Code zu verstehen, der nicht alle Register des PICs auswendig kennt. Schließlich hast du ja die Datei P16f84.INC eingebunden, somit kannst du auch die Aliasnamen benutzen. Aber anonsten ist der Code schon richtig. Muß also ein Hardwareproblem sein.
Hallo Tobias, wie man sieht steht ihr am anfang einer einarbeitung in eine technische welt, von der ihr bis jetzt noch nicht so viel zu wissen scheint. wenn ihr schenll zum ziehl kommen wollt, dann müsst ihr die sache schon etwas strukturierter angehen. 1) nehmt den pic aus der schaltung. legt an die pins von rb0 bis rb7 in der offenen pic fassung nacheinander plus 5volt, und schaut erstmal ob die leds so leuchten wie sie sollen. messt die spannung an den pins in der fassung an denen gnd und plus 5v anliegen soll kontrolliert mit anderen hilfsmitteln, ob die beiden optokoppler dei signale liefern die ihr benötigt, oder wie ihr sie euch vorstellen, natürlich alles in der pic fassung messen. z.b mit hilfe einer led, oder etwas ähnlichem... 2) schließt an einen pin des Ra ports noch einen taster, oder schlater an. so das ihr >SICHER einen pegel von gnd oder 5v an diesem pinne habt - kontrolliert das! erreichen könnt ihr das wenn ihr einen wechselschalter nehmt, und ihn mit gnd und 5V zum auswählen beschaltet,. oder einem taser mit 1 oder 10k pull up. taster gegen masse, natürlich. 3) nehmt diesen programm, es ist vollständig und sollte den pin an dem der taser angeschlossen ist, wenn es denn richtig läuft, an die port b pins durchreichen. wenn die led dann macht was ihr am schalter n angebt - dann habt iht eurer erstes lauffähiges programm erfolgreich in den pic bekommen. list p=16F84A #include <p16F84.inc> VARIABLEA_A EQU 0x0C ;0x0c absolute erste ram zelle VARIABLEA_B EQU 0x0D org 00 goto INIT ; org 04 ; goto ISR INIT bsf status,5 ;Wechsel zu Bank1 bcf status,6 movlw b'00000000' ;PortB 'IN' or 'OUT' movwf trisb ;1=IN ; 0=OUT movlw b'11111111' ;PortB 'IN' or 'OUT' movwf trisa ;1=IN ; 0=OUT ; bcf option_reg,7 ;Pull-UP PortB enable bcf status,5 ;Wechsel zu Bank 0 bcf status,6 goto START ;=================Hauptprogramm============================= START movf PORTA,w movwf PORTB goto START 4) wenn ihr euch das programm mal etwas genauer anseht werdet ihr dem hauptprogramm das ja nun nur ganze 3 zeilen beträgt, erkennen, das der inhalt des Portsa zum portb über das arbeitsregister w kopiert wird, wenn ihr das seht, dann ist das schonmal ein gutes zeichen. anschließend gehts wieder von forn los. 5) sollte etwas nciht laufen, kontrolliert, spannung, nicht eingesteckte stecker, ob der ossillator am pic schwingt, ob ihr den richtigen port eingestellt habt, am rechner, für euren programmer ussw.. einen schritt nach dem anderen, und immer kontrollieren... ansosnten wisst ihr ja garnicht was nicht geht, es gibt bei dieser sache einfach zu viele dinge die man falsch machen kann.... allgemein: pins eines prozessors sollte man immer beschalten, besonders den restet pin. das mit eurem oc driver uln... ist natürlcih richtig - die ausgänge treiben wenn sie ein h am eingang haben, gegen masse, ergo gehört die led samt vorwiederstand gegen +5v.ps.: die leds sind selbst wenn es kein oc driver wäre und ich jetzt nicht total spinne auch noch allesamt falschherum eingebaut, dh. wenn ihr jetzt den schaltplan abändert, müsst ihr nur den gemeinsamen anschluss auf plus 5 v legen, die leds sind dann schon richtig herum... ich hoffe éuer pic ist ein typ /20 typ und nicht ein /04 (sieht man wenn man guckt was hinter der bezeichnung pic16f84 ... auf dem ic gehäuse guckt. die zahl steht für die maximale taktfrequenz. da ihr einen 20mhz quarz verwendet, werdet ihr mit /04 (max 4Mhz) auch keinen erfolg haben.... maddin
soooo, ein Stromplaufplanupdate ;-) So richtig ?! Bitte gebt uns einbischen Zeit, wir sind dabei ! ATM löten wir die LEDS aus und schalten die über den widerstand kathodenseitig an die treiberstufe um sie dann mit der anode direkt an +5V zu legen. Im Programm selbst fehlt eine Art Schleife, damit mein ich, er fragt nur einmal ab und dann is essig.... Aber wir arbeiten dran ;-)
zu madins quelltext: movlw b'00000000' ;PortB 'IN' or 'OUT' movwf trisb ;1=IN ; 0=OUT movlw b'11111111' ;PortB 'IN' or 'OUT' movwf trisa ;1=IN ; 0=OUT Kann es sein das du dich da mit den Ports bzw. Ihren TRISTATE Registern vertan hast ? weil Port A hat doch nur 5 bit....
maddin,
intern werden nur 8 bit register verwendet - d.h. die bits 5,6,7 sind
unbenutzt kannst auch 00011111 nehmen.
man hat bei euren antworten nicht den eindruck als würdet ihr auf die
posts eingehen...
maddin
ps.: in deinem letzten quellcode fehlt wieder das org. aber ihr schafft
das schon...
>Im Programm selbst fehlt eine Art Schleife, damit mein ich, er fragt
nur einmal ab und dann is essig....
verstehe ich nicht - läuft es denn schon...
Hallo Maddin, und wie wir drauf eingehen ! Testen atm a) mit deinem Programm b) mit dem Lauficht von sprut.de und - NÜX ! Vermuten bald dasder PIC im Sarg is... Messen jetzt auf der Platine !
Wieder nichts, so ein Mist ! Sind bald mit unserem Latein am Ende :-( IDEEN !!! Was kann ich noch tun ? Evtl. neue Platine ? wenn ja, hat wer nen stromlaufplan bzw. kritik an unserem ?
Boah, wenn man der Sourcecode hier so sieht, dann weiß man, dass 30 Jahre Softwareentwicklung komplett ignoriert worden sind. Die Verwendung des PIC16F84 ist doch pure Selbstgeißelung. Hier ist die Lösung für dein Problem: 1. entsorge den PIC16F84 2. nimm einen ATMega8 3. programmiere das alles nochmal ordentlich in C Mit ordentlich ist gemeint: 1. programmiere strukturiert 2. verwende sinnvolle Namen für Funktionen und Variablen 3. definiere Konstanten mit sinnvollen Namen für externe Signale Dann klapps auch mit dem Programm und es besteht eine reelle Chance, dass die arme Sau, die nach dir das Projekt betreuen muss, das nicht nochmal alles neu machen muss.
also: Das Projekt selbst ist absolute Fantasie für eine schule !! MÜSSEN das mitm PIC realisieren, no way4ATMEL !!!
ja das is richtig toll. im vergangenen lehrjahr haben wir bereits den atmel kennen gelernt. da wir aber für unsere abschlussprüfung den pic brauchen, machen wir jetzt alles mit dem pic. finden wir zwar auch sch***e aber wir können da nix machen. selbst die lehrer finden das nicht gut. der prüfungsausschuss (pal) hat entschieden, dass in der prüfung für die elektroniker für geräte und systeme der pic verwendet wird. wir lernen zur zeit alle den pic (selbst die lehrer kennen sich nicht mit pic aus). deshalb nehmen wir den pic.
ES LÄUFT !!! Zumindest soweit wir sind, nur: Wi brauchen eine Zeitschleife !!! Haben uns unter http://www.piclist.com/techref/piclist/codegen/delay.htm eine generieren lassen, aber das funzt nicht so wirklich :-( Ideen ?! Danke erstmal für die Hilfe !!!
Hallo Dominik, Erstmal Congretulations für die ersten Erfolge. Die Zeitschleife habt ihr schon, heisst "wait" im Beispielprogramm von Sprut. Besorgt euch am besten die Befehlsbeschreibung (meine Ref-Datei ist leider zu gross zum Anhängen), sind nur um die 30 Befehle.(RISC-Prozessor = Reduced Instruction Set) und die meisten davon braucht ihr erstmal nicht. Irgendwas zusammenkopieren und gucken wie's (nicht) funktioniert, kostet euch mindestens genausoviel Zeit und Nerven wie selberlernen. @ Horst-Otto <3. programmiere das alles nochmal ordentlich in C> ich empfehle FORTRAN :-)
LEDAN1 und LEDAN2 werden so nicht leuchten da sie nach Plan von 10:41 Uhr zwischen +5V und +5V geschaltet sind.
hallo Dieter Werner wieso sollen die leds nicht leuchten. die anode ist an +5v und die kathode über wie widerstände an masse. d2 hat open collector. das haben wir auch vorher nicht beachtet. dies wurde noch nachträglich im stromlaufplan und auf unserer testplatine geändert. den hast du dir auch angesehen. ursprünglich waren die leds andersrum drin und da wo jetzt die +5v sind war gnd. so funktionierts erst mal. mfg tobi aka bob
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.