mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2 Counter am Pic18f448


Autor: Hubert Mitterhofer (thimm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hoi zusammen,

kann mir jemand bestätigen / widersprechen, dass beim pic18fxxx nur ein 
timer als counter betrieben werden kann?
ich möchte mit meiner schaltung unter anderem 2 motorencodersignale 
auswerten und dazu flanken mitzählen. sowohl timer0 als auch timer1 
haben jeweils einen eigenen externen clock-eingang (T0CKI, T1CKI), aber 
sobald ich z.b. den timer1 auf extere clock-source stelle zählt der 
timer0 nicht mehr mit...

in datenblättern  google  foren bin ich dazu noch nicht fündig 
geworden, bitte, bitte, sagt mir dass das nicht wahr ist...

danke, hubert

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

es soll problemlos funktionieren!

Poste mal die Einstellungen !

Autor: Hubert Mitterhofer (thimm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also hier mal die relevanten source stellen, sobald ich T1_SOURCE_INT 
auf T1_SOURCE_EXT ändere reagiert der Timer0 nicht mehr auf eine 
Taktflanke am A4 pin (was er bis dahin aber tadellos macht).

weiters werden noch eine pwm, eine epwm und der adc betrieben.



#include <p18cxxx.h>

#include <stdio.h>
#include <pwm.h>
#include <timers.h>
#include <adc.h>
#include <delays.h>

(...)

void main(void)
{

CMCON=0x07;

OpenTimer0 (TIMER_INT_OFF & T0_8BIT & T0_SOURCE_EXT & T0_EDGE_FALL & 
T0_PS_1_1 );
TRISA=0xff;
TMR0H=0;
TMR0L=0;

TRISCbits.TRISC0=1;
OpenTimer1( TIMER_INT_OFF & T1_8BIT_RW & T1_SOURCE_EXT & T1_PS_1_1 & 
T1_OSC1EN_OFF & T1_SYNC_EXT_OFF );
TMR1H=0;
TMR1L=0;

(...)

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne mich mit C nicht aus.
Sieh mal in den erzeugten Assemblercode, wie die Register T0CON und 
T1CON angesprochen werden.

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> #include <p18cxxx.h>

Ist das die richtige include für PIC18F ?

Autor: Hubert Mitterhofer (thimm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, die include sollte passen. das ist eine generische für eine ganze 
serie von pics. ich hab allerdings auch schon die 18f448.h included, 
ändert nix.

mit assemblercode kann ich leider nicht wirklich dienen, das was mir der 
compiler an disassembly ausspuckt hat keine pic-üblichen namen für die 
register sondern nur nummern, ich hab selber zwar nur ca ein jahr pics 
in assembler programmiert, aber da was rauszulesen... äußerst mühsam.

mittlerweile geht auch mein ganz gewöhnlicher timer0 im counter modus 
nicht mehr. ich versteh's echt nicht.... ich wüsste auch nicht was ich 
geändert hab. wenn ich doch bloß eine gute möglichkeit finden würde zu 
testen ob nicht etwa die schaltung was hat...

-hubert

Autor: Hubert Mitterhofer (thimm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
*mittlerweile am verzweifeln:
sieht hier irgendjemand einen guten grund warum das nicht funktionieren 
sollte? es soll lediglich überprüfen ob der Timer0 die flanken des 
taktsignales (~10kHz) tatsächlich zählt. er tut's nämlich nicht..
-hubert





#include <p18cxxx.h>

#include <stdio.h>
#include <timers.h>

#define Stest LATDbits.LATD0

void main(void)
{
TRISD = 0x00;

//switch off comparator modules (important for usage of PortD)
CMCON=0x07;

OpenTimer0 (TIMER_INT_OFF & T0_8BIT & T0_SOURCE_EXT & T0_EDGE_FALL & 
T0_PS_1_1 );
TRISA=0xff;
TMR0H=0;
TMR0L=0;

ADCON1bits.PCFG3=1;
ADCON1bits.PCFG2=1;
ADCON1bits.PCFG1=1;
ADCON1bits.PCFG0=1;

while(1){

  if(TMR0L!=0) {
    Stest=~Stest;
    TMR0L=0;
  }

}

} //end main

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir das noch mal genau an ;)

  if(TMR0L!=0)
  {
    Stest=~Stest;
    TMR0L=0;
  }

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>    Stest=~Stest;

    Stest= !Stest;

Besser ?

Autor: Hubert Mitterhofer (thimm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nö, das interpretiert der c18 compiler schon richtig. das tragische 
daran ist, dass wenn ich den timer1 dafür konfiguriere

(
TRISCbits.TRISC0=1;
OpenTimer1( TIMER_INT_OFF & T1_8BIT_RW & T1_SOURCE_EXT & T1_PS_1_1 & 
T1_OSC1EN_OFF & T1_SYNC_EXT_OFF );
TMR1H=0;
TMR1L=0;
)

 und mit der selben abfrage -

(
if (TMR1L!=0) {
  Stest=~Stest;
  TMR1L=0;
  }
)

verwende funktionierts. ich steh echt langsam an...
-hubert

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Inwieweit kann der C-Compiler den 1:1-Prescaler umsetzen, wenn es diese 
Einstellung für den Timer0 eigentlich nicht gibt, man müßte den 
Prescaler ganz abschalten.

Autor: Hubert Mitterhofer (thimm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein, leider auch der prescaler ist so in ordnung.

das ist eine library function, die bei T0_PS_1_1 den prescaler 
ausschaltet.

noch immer keine besserung in sicht...

Autor: Hubert Mitterhofer (thimm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nur der Vollständigkeit halber möchte ich erwähnen, dass die beiden 
counter doch gemeinsam funktionieren. man sollte jedoch die pins von der 
richtigen seite her zu zählen beginnen. dann verbindet man seinen draht 
auch mit dem richtigen pin...
wie so oft im leben ist alles nur eine frage des betrachtungswinkels.

danke allen postern!

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.