Forum: Mikrocontroller und Digitale Elektronik PIC16F877 - Timer0-programm startet nicht


von BuschenSen (Gast)


Angehängte Dateien:

Lesenswert?

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

von dds5 (Gast)


Lesenswert?

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

von BuschenSen (Gast)


Angehängte Dateien:

Lesenswert?

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?

von dds5 (Gast)


Lesenswert?

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

von Simon Küppers (Gast)


Lesenswert?

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

von Steffen (Gast)


Lesenswert?

Wie hast Du den PIC konfiguriert? HS, WDT?

von BuschenSen (Gast)


Lesenswert?

Da ich das Ding bei 20MHz betreibe läuft es mit HS! Der Wachhund ist
aus.

von Steffen (Gast)


Lesenswert?

Der PIC bleribt im UP wait hängen. Das Return wir nie erreicht.

von BuschenSen (Gast)


Lesenswert?

Wo liegt der Fehler muss ich die INTCON, GIE und T0IE setzten? Und dann
mit dem Interrupt Vector arbeiten oder wo liegt der Fehler?

von Steffen (Gast)


Lesenswert?

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. .

von BuschenSen (Gast)


Lesenswert?

werd ich mal ausprobieren!

von BuschenSen (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Steffen (Gast)


Lesenswert?

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.

von BuschenSen (Gast)


Lesenswert?

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.

von Steffen (Gast)


Lesenswert?

Ich habe es mal durch den Simulator laufen lassen. Funktioniert.

von dds5 (Gast)


Lesenswert?

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

von Sigmund (Gast)


Lesenswert?

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??

von Schoaschi (Gast)


Lesenswert?

SChau dir mal die Seite von SPrut genau an... da sind auch beispiele mit
dem Timer drin.

http://www.sprut.de/electronic/pic/programm/index.htm

von conrad (Gast)


Lesenswert?


von Sigmund (Gast)


Lesenswert?

danke(=!

von Sigmund (Gast)


Lesenswert?

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(=!

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
Noch kein Account? Hier anmelden.