www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interner Oszillator


Autor: Hainz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe ein einfaches Lauflicht für einen PIC 17F630 in C geschrieben. 
Nun möchte ich die Richtung des Lauflichts mit einem per Taster 
ausgelösten Interrupt umkehren. Dazu wollte ich die Pins alle Auf 
Digital umstellen, und habe dazu die ersten 3 Bit des CMCON Registers 
auf 1 gesetzt. Doch seitdem läuft der interne Oszillator nichtmehr. Weiß 
jemand woran das liegen könnte?

MFG
Hainz

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meinst du den 16F630? Im Datenblatt steht sonst nichts besonderes im 
CMCON Register, was so ein Verhalten erklären würde. Bist du sicher, daß 
der interne Oszillator nicht mehr läuft? Programmiere mal das 
Configration Word 2007, sodaß CLKOUT am RA4-Pin anliegt. Da müsstest du 
dann 1/4 des internen Taktes per Scope messen.

Bei Interrupts kann man auch viel falsch machen, sodaß die CPU irgendwo 
ins Nirwana springt (Interrupt Vector falsch gesetzt) oder dauernd den 
Interrupt wieder anspringt (INTCON-Flags bei Eintritt in den Interrupt 
nicht gelöscht).

Wenn du schon ein Lauflicht hast, würde ich einfach im Rahmen des 
Lauflichts den Taster abfragen.

Autor: Hainz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Frank,
ein Oszilloskop steht mir leider nicht zur verfügung. Ich habe mein 
Kinfigurationsword durch "2007" ersetzt, doch leider passiert dann 
garnichts mehr.
Auch habe ich es mit einem externen Oszillator versucht, doch es ist das 
gleiche Ergebnis: Setzte ich die ersten 3 Bit des CMCON Registers auf 
eins um alle PINS auf Digital umzustellen, Läuft das Lauflicht 
nichtmehr.
Das es am Interrupt liegt denke ich nicht, denn solange die Eingänge 
nicht Digital kann theorethisch ja kein Interrupt ausgelößt werden, von 
daher...

Woran könnte es noch liegen?

MFG
Hainz

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da habe ich mich missverständlich ausgedrückt: Ich meinte die Bits in 
dem Konfigurationswort 2007 so setzen, daß am RA4-Pin CLKOUT 
rausgeschaltet wird. Aber da du kein Scope hast, erübrigt sich das. Du 
könntest höchtens per Multimeter sehen, daß da scheinbar die halbe 
Versorgungsspannung stabil anliegt, da das so hohe Frequenzen 
integriert. Stabil in dem Sinne, daß du da auch ein 1k Widerstand nach + 
oder - legen kannst und die Spannung immer noch dieselbe ist.

Ansonsten mache ich in solchen Situationen folgendes: Zurück zur letzten 
funktionierenden Version (ein Versionsmanagmentsystem wie SVN ist dafür 
sehr sinnvoll). Dann schrittweise die Änderungen nachvollziehen und 
sehen, wo es hängenbleibt.

Also meine Vermutung wäre ja die Interruptprogrammierung. Daher also von 
der stabilen Version ausgehend erst das CMCON-Register umprogrammieren 
und testen. Dann vielleicht versuchen die Pins abzufragen und testen. 
Dann den Interrupt wieder einbauen, falls du das wirklich per Interrupt 
lösen willst.

Autor: Hainz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, du hattest doch recht, es lag am Interrupt. Mein Pull-Up Widerstand 
war falsch. Aber nun noch eine andere Frage: Wie kann ich in C von einer 
Funktion, also von einem Unterprogramm herausspringen wie ich es in 
Assembler problemlos mit "goto" konnte? Wenn ich verusche zurück zu main 
zu springen (main ();), zeigt es immer einen Fehler an...

MFG
Hainz

Autor: bingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
return ???

Autor: Frank Buss (foobar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In C ist ein "main();" sowas wie ein "Call main". Goto geht glaube ich 
nur innerhalb von Funktionen, es sei denn, du verwendest longjomp, was 
aber kein Standard C ist. Vergiss aber beides am besten sofort wieder 
:-) und schau dir mal die verschiedenen Ergebnisse an, die eine Google 
Suche nach "strukturierte Programmierung" ergibt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.