Hallo,
ich hab einen 16F877 mit 20MHz und wollte mal den Timer0 ausprobieren.
Ich benutze MPLAB und habe das Prog mit MPSIM simuliert dort hat auch
alles gefunzt. Als der Overflow-interrupt gesetzt wurde hat er die
Warteschleife verlassen. Am Anfang ist ein Test der alle LED's(PORTC)
auf high setzt bis die beiden Schalter(PORTB.1 und PORTB.2) gesetzt
wurden.
Interressant ist, dassdas Programm auf dem PIC garnicht funzt. Noch
nicht einmal die LED's werden aktiviert. Der Chip ist aba noch ok,
denn andere Programme ohne den TMR0 laufen. Woran kann das liegen???
danke für die Hilfe
BuschenSen
Hallo BuschenSen,
erstmal zum Fehler: das Timer0 Interrupt Flag wird nicht gelöscht und
deshalb kehrt wait für alle Aufrufe sofort zurück.
Zum anderen ist für INTCON keine Bankumschaltung erforderlich.
Hier die angepasste wait Routine
wait ; warte 1ms
MOVF INTCON, 0
MOVWF buffer
BTFSS buffer, 2
goto wait
bcf INTCON, 2
return
Hoffe das funzt.
Gruß Dieter
Ich habs jetzt verbessert und es sieht gez so aus(siehe Anhang). Es geht
immer noch net! gibt's irgendwo nen Tutorial über den Timer0 mit
beispiel code?
Hallo,
PIC's scheinen nicht sehr beliebt oder verbreitet zu sein, wenn man
das aus den (nicht vorhandenen) Reaktionen hier schließen will.
Wenn ich nicht beruflich mit den Dingern zu tun hätte wär ich sicher
schon bei ATMega oder LPC gelandet.
Wir verlagern das Ganze am besten auf direkten mailkontakt.
Verklausulierte mailadr. ist vornamenachname (direkt
zusammengeschrieben) AT gmx DOT net. nachname = Werner, vorname siehe
unten. Habe bisher nur diese mail und will sie mir nicht vollmüllen
lassen.
Gruß Dieter
Man kanns echt übertreiben
---------
Verklausulierte mailadr. ist vornamenachname (direkt
zusammengeschrieben) AT gmx DOT net. nachname = Werner, vorname siehe
unten. Habe bisher nur diese mail und will sie mir nicht vollmüllen
lassen.
Gruß Dieter
So müsste es funktionieren:
wait ; warte 1ms
bcf INTCON, 2 ; Interruptflag zurücksetzen
BTFSS INTCON, 2
; bsf PORTB, 7 ; hat hier nichts zu suchen
goto wait
return
Mit dem Interruptvektor musst Du nicht unbedingt arbeiten. .
Also der Code sieht jetzt so aus(Anhang)! Das mit dem bsf PORTC, 7 is
nur ne Kontrollled weil ich wissen wollte ob der die wait routine
überhaupt aufruft. Mir sind zwei Dinge aufgefallen:
Wenn die Initialisierung von OPTION_REG in Bank1 stattfindet, wie im
Datenblatt angegeben, dann hängt sich das Prog an dieser Stelle auf.
Wenn sie in Bank0 stattfindet, dann hängt sich das Prog erst in der
wait Routine auf.
Es scheint also an OPTION_REG zu liegen ich kann mir aba den Fehler
trotzdem net erklären.
Da funktioniert irgend etwas anderes nicht. Ich wüsste nicht, warum dein
Programm nicht laufen sollte. WDT definitiv ausgeschaltet?
OPON_REG in Bank1 ist schon OK.
WDT ist aus. Ich raff es ja auch net, weil in den meisten Tutorials ist
das ähnlich realisiert. Aber alle Programme die den Timer net benutzen
funzen. Also PIC, Brenner3 und ICPROG sind ok.
Hallo,
da alles ordentlich aussieht und mich das Problem auch interessiert hab
ich mal schweres Geschütz aufgefahren und das Prg. mit dem ICE2000
getestet. Dabei passieren sehr merkwürdige Sachen.
Obwohl ich keinen Breakpoint gesetzt habe, bleibt der ICE beim ersten
Durchlauf in der wait Routine stehen. Wenn ich wieder starte, wird die
Bitabfrage in wait genau 2 mal ausgeführt und schon ist wieder Sense.
Das lässt sich beliebig oft wiederholen.
Daraufhin habe ich mal den org 0x04 in 0x06 geändert und plötzlich lief
alles wie am Schnürchen. Nun ist zwar 0x04 der ISR Vektor, aber da
definitiv alle Int's ausgeschaltet sind sollte das keinen Einfluss
haben.
Gruß Dieter
Hi Leute,
Ich bräuchte dringend euere Unterstützung, bitte last mich nicht im
Stich!!! Also mein Sensor: ADXL213 wird mit dem µP am 3.2 Pin angehängt
bzw der Taktimpuls ich habe einen 11MHz Quarz und meine µP handelt es
sich um einen AT89LP2052 also atmel 8051(standard)Architektur. Ich muss
LEDs ansteuern. Aber im Grunde brächte ich den C-code für den Timer0,1
Modus.Jemand eine Ahnung??
hey Leute es geht um das selbe Problem. Sorry! Ich brauch es eingetlich
nicht nicht für "Pic" sondern einfach nur auf C ....für den Timer1,0;
SPI...wobei ich da wirklich keine Möglichkeiten gefunden habe..wie´s
funktioniert!! SPI ist ein Seriel Programming interface auch ansprechen
muss.
Also der Sensor ADXL213 wird mi´m µP von Atmel 89TC2051P connected,
dann wird der µp mi´m MAX7301 connected. Es ist sehr konfus alles...am
besten ich schick eich die Links:
Sensor ADXL213:
http://www.analog.com/en/prod/0%2C2877%2CADXL213%2C00.html
µP AT89LP2052/4052 Preliminary:
http://www.atmel.com/dyn/products/product_card.asp?family_id=604&family_name=8051+Architecture&part_id=3627
Maxim 7300:(für die 20 LED´s):
http://pdfserv.maxim-ic.com/en/ds/MAX7301.pdf oder
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3371
Die ganze Schaltung hat den Sinn: 20 LED´s sollen je nach Bremsstärke
alle aufleuchten. Das bedeutet ist die Abbremsung max. dann lechten
alle Led(Leuchdioden) auf, und so soll es funktionieren. Ne Ahnung wie
der Code aussehen könnt? Wenn ihr fragen habt nur zu....ich zähl auf
euch brauche das bloß für die Schule, habe sonst niemanden der mir da
helfen könnt......bin ehh schon down ....brauche es bis Jänner)=.....
help I need somebody, help not just anybody............(Beatles)
Danke im Voraus(=!