Hey, vielleicht kann mir einer von euch Helfen. Mache grad erste Schritte mit dem PIC16F872 in Assambler(C ist ein schwarzes Buch für mich) und wollte jetzt den DS18S20 erstmal auslesen und im Hyperterminal ausgeben. Geplant ist vorerst: Wenn ich am Hyperterminal "t" eingebe, soll der DS18S20 ausgelesen werden und dies dann im HT angezeigt werden! Hab schon 2mal die .asm neugeschrieben, dann im i-net nach Hilfe gesucht. Einig versuche abgekupfert nochwas bei gefügt und am ende alles so verbaut das ich alles nochmal neu gemacht hab. Nach jetzt schon 3 Nächten..... bin ich jetzt schon kurz vor dem Aufgeben:( !!!! Dachte die com.inc is falsch und hab mal schnell eingefügt das, wenn ich "q" eingebe mir "ok" ausgegeben wird und.... siehe da das geht! Aber bei dem "t" befehl für's auslesen und anzeigen der Temperatur geht nichts|-( Die .asm Datei leg ich mal dabei vielleicht sieht einer von euch den Fehler den ich schon so oft übersehen habe. Muss ich eigentlich diesen CRC berechnen und abgleichen?! Hoffe das noch irgendeiner diesen 16f872 benuzt oder wird der so selten gebraucht das ich mich doch für den falschen entschieden hab??Kenn mich noch nicht so gut aus aber das wird wohl mit der Zeit kommen;)
[asm] HP: call empf ;HT abfragen movfw datum xorlw 'q' btfss STATUS,Z ;wenn "q" aus Hypert. schreib ok zur�ck goto _1 ;sonst pr�fe auf t ... ... _1: call empf ; <--------- hier empfängst Du nochmals ; statt das vorher empfangene Zeichen auf 't' zu ; prüfen movfw datum xorlw 't' btfss STATUS,Z ;wurde t im Hyperterminal gedr�ckt? [/asm] Dies ist mal ein erster Punkt. Vielleicht liegt's aber nicht nur daran. Wo ist eigentlich das Label empf ? > Muss ich eigentlich diesen CRC berechnen und abgleichen?! Welchen CRC und was abgleichen? > Hoffe das noch irgendeiner diesen 16f872 benuzt oder wird der so selten > gebraucht das ich mich doch für den falschen entschieden hab?? Ist nicht gerade sehr verbreitet. Microchip empfiehlt für neue Anwendungen den PIC16F882. Leider hat keiner der beiden einen UART, was für die serielle Kommunikation mit dem PC ideal wäre. Nächstes Mal würde ich einen PIC16F886 nehmen, oder wenn der für gewisse Distributoren noch immer zu neu ist (gibt's seit > 2Jahren), dann den PIC16F876A. > Kenn mich noch nicht so gut aus aber das wird wohl mit der Zeit kommen. Kommt schon noch, aber nicht von alleine. http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1469 http://www.sprut.de http://www.fernando-heitor.de
Hey danke für die schnelle Antwort und die Links. Zwei davon hab ich schon komplett durch gesucht aber den dritten werd ich mir auch noch rein ziehn > _1: call empf ; <--------- hier empfängst Du nochmals > ; statt das vorher empfangene Zeichen auf 't' zu > ; prüfen Hast recht müsste ja nur "datum" nochmal in "w" laden, da das w-register ja durch die xorlw 'q' verändert wird Dachte nur CRC müsste ich auch berechnen und abgleichen (Datenblatt DS18S20 s.8) klammer mich gard an jede noch so kleine Idee Ja die große Wahl hatte ich jetzt nicht gerade, da das so ne Übungsplatiene von der Schule ist, aber ich versuch was draus zu machen:-) da ich bis jetzt nur den kenne und noch einiges an Erfahrung sammeln muß ......
hey hat denn keiner mehr ne idee?? komm irgendwie nicht weiter! ist das jetzt im ansatz richitg oder hab ich das alles falsch verstanden und muss noch irgendwelche register setzten, lesen (sspie) oder....... muss ich den pic in master mode setzten?? oder nur den portc,0 setzten nicht setzten dabei lesen und schreiben?? wäre für n paar tipps dankbar da mir jtzt fast jeder ansatz fehl:-(
H-georg wrote: > und muss noch irgendwelche register setzten, lesen (sspie) oder....... > muss ich den pic in master mode setzten?? oder nur den portc,0 setzten > nicht setzten dabei lesen und schreiben?? Warum versuchst Du es nicht und schaust, ob es dann geht? Der Lerneffekt ist dabei sicher am grössten. Oder schaust auf http://www.gidf.de nach, ob jemand schon mal einen ds18s20 mit einem PIC angesteuert hat.
Hallo, du verwendest wilde Nebeneffekte, als Beispiel, habe danach nicht mehr weitergelesen. >sende_byte: movwf iobyte ;w-register speichern > movlw .8 > movwf count ;zaehler f�r die 8 bit count ist in bank 0 >sende_loop: dq_low > nop > nop > nop > rrf iobyte,f ;1bit in carry laden > bsf STATUS,RP0 diese Zeile gehört raus, dann funktioniert es!!! > btfsc STATUS,C > bsf TRISC,0 > bcf STATUS,RP0 > wait .60 wait .70 sollte es eigentlich heissen. > dq_hi > nop > nop > decfsz count,f hier verwendest du die Variable in Bank1 !!! > goto sende_loop > retlw 0
@ Severino danke aber bei google hab ich schon gesucht wie n wilden.... dachte hier bekomm ich so was wie "du musst das und das noch weglassen oder zeiten sind falsch und zu wenig..." n paar tips halt! erwarte ja keine fertige asm die ich mir auf n pic hau und gut is! @ Chris danke dir chris! bin grad im Urlaub aber wenn ich zuhasue bin werd ich das mal direkt versuchen! dachte ich hab da n paar zeiten falsch bzw. muss keine reinnehmen da der pic eigentlich die zeiten vorgibt oder? Taktung!? muss ich auf die zeiten von dem ds18s20 achten read/write-time-slot? noch ne frage kann der pic was mit dem befehl anfangen? >wait: macro time ;verzögerung in 5us schritten > movlw (time/5)-1 > movwf tmp0 movlw (time/5)-1: rechnet der da echt??
Also der µC rechnet da nichts. Der lädt nur eine Konstante nach w. Aber der Assembler versucht zur Laufzeit des Kompilers (also wenn er das Programm kompiliert) diesen Konstrukt aufzulösen. Und der rechnet dann eine Konstante aus, welche im Code gespeichert wird. Wäre time=10, dann würde der Kompiler (10/5)-1 =1 ausrechnen und den Befehl movlw 1 in den µC schreiben.
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.