Was habe ich übersehen?
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  Programmiersprache Assembler  |  Was habe ich übersehen? « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Was habe ich übersehen?  (Gelesen 2170 mal)
 
Cobra-Schock
Newbie
*
Offline Offline

Beiträge: 6


Profil anzeigen
« am: Januar 20, 2011, 17:08:36 »

Guten Abend Bastlerfreunde,

ich versuche mich dabei ein "einfaches" Programm zu schreiben
um Daten zu übertragen. Zum Ausprobieren wollte ich ein kleinen Motor
ansteuern. Das Programm funktioniert soweit auch NUR, dass der Empfänger
Störsignale empfängt und der Motor nun dann läuft, wann der Controller der
Meinung ist. Also wollte ich durch ein Timerüberlauf nach einer bestimmten Zeit
die vorhanden Daten, die bis dahin Empfangen wurden löschen.
Und nun geht garnichts mehr.
Durch LEDs ließ ich mir mal anzeigen, wie weit der Controller kommt.
( Sind die Befehle die nach Rechts versetzt sind). Nun der Controller fährt hoch und das wars.
Er erkennt also nicht mal eine Eingabe bzw. ein "high" an RA0.
Und nun ist die frage warum nicht?

Danke für eure Hilfe.

* Empfängertest_timer1.asm (2.51 KB - runtergeladen 68 Mal.)
Gespeichert
Hagi
Full Member
***
Offline Offline

Beiträge: 201


Profil anzeigen WWW
« Antworten #1 am: Januar 20, 2011, 21:18:55 »

In der Interrupt-Routine sicherst du die Register falsch.
Dadurch wird das Status-Register verändert, das den "normalen" Programmablauf durcheinander bringen wird.

Auf der Homepage von Sprut fndest du bei http://www.sprut.de/electronic/pic/int/int.htm#umgebung eine gute Anleitung zu diesem Thema.
Gespeichert

Cobra-Schock
Newbie
*
Offline Offline

Beiträge: 6


Profil anzeigen
« Antworten #2 am: Januar 21, 2011, 14:06:53 »

In der Interrupt-Routine sicherst du die Register falsch.
Dadurch wird das Status-Register verändert, das den "normalen" Programmablauf durcheinander bringen wird.

Auf der Homepage von Sprut fndest du bei http://www.sprut.de/electronic/pic/int/int.htm#umgebung eine gute Anleitung zu diesem Thema.

Danke für den Hinweiß Smiley

allerdings macht der genau so viel wie vorher.
Also hat es nicht daran gelegen (?)
Gespeichert
Lux
Jr. Member
**
Offline Offline

Beiträge: 87



Profil anzeigen WWW
« Antworten #3 am: Januar 21, 2011, 16:16:09 »

Was mir gerade mal beim drüber fliegen aufgefallen ist, dass du in der ISR, das TMR1IF Bit nicht löscht somit sitzt der PIC schon mal in einer Endlosschleife. Außerdem würde ich die TMR1(H/L) Register löschen bevor ich den Interrupt erlaube.

Das war es erstmal..
Gespeichert

www.PIC-Projekte.de Projekt Vorstellungen | PIC-µC-Forum
Cobra-Schock
Newbie
*
Offline Offline

Beiträge: 6


Profil anzeigen
« Antworten #4 am: Januar 23, 2011, 16:29:16 »

Hm, nun habe ich alles, was Ihr feststellen konnten geändert.

Allerdings kommt der PIC bis zur Abfrage des RA0 einganges.
Ist jedoch nicht in der lage fest zu stellen ob ein High Signal
anliegt...

die Rettung der Register habe ich nun geändert auf:
      movwf   rettw             ;W in rettw speichern
          swapf   STATUS,w          ;Status vertauscht nach W
          bcf     STATUS, RP0       ; status in Bank 0
          movwf   retts             ;status speichern

und das ende...

      swapf   retts,w           ;Status vertauscht nach W
         movwf   STATUS            ;W nach Status
         swapf   rettw,f           ;Copy von W verauschen
          swapf   rettw,w           ;W vertauschen,zurück nach W

Oder kann man die TMR1L/H wärend der Timer läuft nicht löschen?
Oder was kann noch die Abfrage der Eingänge beeinflussen?
Denn ab da scheitert scheinbar mein Programm...
Gespeichert
Hagi
Full Member
***
Offline Offline

Beiträge: 201


Profil anzeigen WWW
« Antworten #5 am: Januar 24, 2011, 12:30:39 »

Die PortPins haben mehrere Funktionen. Du mußt sicherstellen das die nicht benötigten auch deaktiviert werden.

Beispiel:
Laut Datenblatt Kapitel 5.1 mußt du die Comparatoren ausschalten.

Das Example 5.1 zeigt dir den Weg.
Code:
MOVLW 0x07  ;Turn comparators off and
MOVWF CMCON ;enable pins for I/O
            ;functions
Gespeichert

Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.04 Sekunden mit 18 Zugriffen.
 
Top! Top!