ASM-Projekt PIC16F1827 o.ä. TIMER1 GATE-MODUL

Begonnen von Ottmar, 25.06.2024, 18:22:20 CEST

Vorheriges Thema - Nächstes Thema

Ottmar

Hallo,

Wer hat Interesse  mir mir zusammen EIN EIGENES ASM-Programm wie nachstehend umrissen zu entwickeln? Würde mich über Zuspruch freuen und gerne andere Ideen zur Programmgestaltung (Pheripherie) kennenlernen.

Im Moment habe ich den PIC16F1827 vor mir und bin gerade dabei alte Kenntnisse über die Komparatoren und das TIMER1 MODULE mit GATE CONTROL (Datenblatt S.177) wieder aufzufrischen. Ich arbeite dabei mit dem MPASM und NICHT mit C. Vermutlich sind die genannten Module auch in einigen anderen PIC's vorhanden. 

Timer1 Gate Modul: 
Ein von Flanken umfasstes Ereignis -im einfachsten Fall die Pulsfolge eines AMV - öffnet und schließt mit jedem Puls ein Zähltor in dessen zeitlchem Verlauf der Timer 1 mit einer externen, bzw.einer internen Frequenz (fosc oder fosc/4) hochgezählt wird.

Als Impuls/Frequenzgenerator  um das Timer1 Gate zu schalten, möche ich den internen Komparator als AMV oder auch einen exernen Generator verwenden. Der integrierte Komparator spart jedenfalls Kabelsalat.

Es geht dabei um
a) die Initialisierung des Komparators und des TIMER1 GATE MODULS
b) Die Anwendung der verschiedenen Modi  wie Puls/Pausenzeit, Periodendauer (Frequenz)
d) wenn nötig per Software entprellte Drucktastern
e) Ausgabe der Messwerte im LCD

Also, lasst mal was hören! 
Ich mache das eigentlich zweckfrei, aus Spaß am programmieren in ASM.

mfG Ottmar

^Cobra

Also Intresse ist definitiv vorhanden :)

Leider ist meine Hütte noch nicht soweit das ich richtig aktiv da was machen kann.
Auch kenne ich dieses Gate Modul überhaupt nicht. Klingt aber sehr spannend und könnte für mich für spätere
Projekte durch aus Interessant sein.

Hast du da bereits Ansätze gestartet?

Gruß
Cobra

Ottmar

Hallo Cobra,
ja natürlich habe ich mich schon damit beschäftigt und auch schon die ersten Schritte unternommen, mich auch eingelesen. Auch wenn man das TIMER1-GATE-MODUL (T1GM) versteht ist immer noch genug zu tun um dieses auch vernünftig handhaben zu können (Bedienung, Ausgabe (etwas Mathematik zur Division bei Frequenz, DutyCylce etc. Dafür habe ich aber schon fertige Unterprogramme).
Der Komparator 2 arbeitet schon und die Ausgabemaske für das LCD habe ich auch mal erstellt, die gilt es nun mit Ergebnissen zu füllen. Wir müßten - falls Du mitmachst - uns absprechen, was wir da alles mit reinpacken wollen.
Wäre schön wenn Du dabei sein könntest.

mfG Ottmar

^Cobra

Moin Moin,
Puh du warst ja schon richtig fleißig.
Da werde ich mir mal das ganze anschauen. Wenn ich dir (noch) Helfen kann würde
ich dies gerne tun.
Bin aber mehr als nur eingerostet :P
Kannst du dein Projekt mal bereit stellen? Würde mir das vorhandene ebenfalls mir schonmal anchauen wollen.


Ottmar

Hi Cobra, danke für die rasche Antwort!
Eine Hilfe im üblichen Sinne war nicht mein Ziel, vielmehr Anregungen und Ideen zur programmtechnischen Auswertung des Timer1 Gate Moduls (T1GM) zu erreichen. Dabei dachte ich mir, dass ein anderer Kopf zu anderen Lösungen wie ich kommen kann und es für die Beteiligten gleichermaßen zum Vorteil gereicht, bzw. dies den eigenen Horizont erweitert.De Initialisierun des Komparators C2 erledige ich z.B wie folgt.  Wie würde jemand anders das machen?
;--C2_PORT(PORTA)            ;Komparator inputs und COUT  DS.120ff
  BANKSEL  C2_PORT          ;bank2  Pinbelegung      DS.11-12
  clrf     C2_PORT
  BANKSEL  C2_LAT
  clrf     C2_LAT
  BANKSEL  C2_TRIS 
  clrf     C2_TRIS
  bcf      C2_TRIS,C2OUTPT  ;RA4 Comparator Output
  bsf      C2_TRIS,C2INNEG  ;RA3/C12IN3- C2 NEGATIVE input
  bsf      C2_TRIS,C2INPOS  ;RA2/C12IN+  C2 POSITIVE input. 
  BANKSEL  C2_ANSEL
  clrf     C2_ANSEL
  bsf      C2_ANSEL,C2INNEG  ;RA3 C2 NEGATIVE input
  bsf      C2_ANSEL,C2INPOS  ;RA2 C2 POSITIVE input. 
  ;
--COMPARATOR MODULE                                        DS.163ff
  BANKSEL  CM2CON0          ;bank2 PORTA-PINS vgl. S.12  DS.170 
  movlw    b'10100000'      ;C2 enabled, C2OUT not inverted
  movwf    CM2CON0          ;C2OUT -> RA4, Low Speed
  bsf      CM2CON0,C2HYS    ;Hysteresis on (ca.65mV) 
  bsf      CM2CON0,C2SYNC    ;sync outp. wiht HL edge TMR1 clock.

Es gibt einige Möglichkeiten mit dem T1GM umzugehen:
1. Dauer des postiven Pulses
2. Dauer des negativen Pulses
3. Periodendauer
4. Frequenz -> 1/Periodendauer
5. Duty Cycle -> Dauer des H-Pulses /Periodendauer
6. Clock-Source des Timer1 fosc oder fos/4  oder extern
    oder unter Verwendung des  Prescalers  1:1-1:8
8. Wie kann das SR-Latch mit einbezogen werden?

;--SINGLE PULS LOW        ;3. Gate Mode Single Pulse HIGH
  ;--T1GCON  Gate CONTROL set as SINGLE H-PULS              DS.186
  ;b7=  1  TMR1GE  Timer1 gate function            ENABLED
  ;b6=  0  T1GPOL  Timer1 gate                      HIGH LOW-ACTIVE
  ;b5=  0  T1GTM    Timer1 Gate Toggle mode disabled
  ;b4=  1  T1GSPM  Timer1 gate Single-Pulse mode is ENABLED 
  ;b3=  0  T1GGO/DONE 1/0 ready/finished
  ;b2=  0  T1GVAL:  Timer1 Gate Current State bit Flag
  ;b1-0=00 T1GSS    Timer1 Gate Source  TIMER1 GATE PIN (RB0)
  movlw    b'10110000' ;b5=0 single pulse
  movwf    T1GCON      ;b5=0 Toglemode disabled für single pulse
  bsf      T1GCON,T1GSS1  ;Timer1 Gate Source is (SYNCC2OUT
  bsf      T1GCON,T1GSS0  ;siehe auch T1CON
  movlw b'10010000'
  movwf TIGCON


Das sind so die Features im T1GFM welche mir bereits im Vorfeld, beim Studium des Datenblattes aufgefallen sind.

Den Programmaufbau habe ich mal so ins Auge gefasst:
  • Prozessor, Variable, Labels, Reset/Interrupt-Vector
  • Initialisierung der SFR (Ports, Timer1, T1GM usw).
  • LCD-Initialisierung (Frage: Wie machst Du das?)
  • Hauptprogramm
  • Ablaufsteuerung (Tastenabfrage, T1GM-Modi, LCD-Ausgabe
  • Unterprogramme (H/L-Puls/Periode u.a.
  • LCD-Ausgabe
  • binäre Mathematik
  • ISR Tastenentprellung
  • ...und... und...?

mfG Ottmar

^Cobra

Moin,
versuche eig. einmal am Tag hier zu schauen ob sich was gerregt hat :P

Also zum Thema LCD: Ich habe mal von Sprut mir das genommen und ehrlich gesagt auch nie weiter damit befasst. Habe
immer den 4 Wire Mode genutzt, so initialisiert wie es Sprut gemacht hat und das wars. :(
Ich Träume zwar davon mir mal ein Grafik Display zu ordern und dieses über I2C oder SPI anzusteuern,
da wollte ich ein Pic als 'Grafikkarte' nutzen sodas ein andere Pic nur ASCII zeichen senden müsste und die Position/Größe und der Pic am Display würde die Pixel berechnen und zum Display schicken. Aber dies ist noch sehr weit in der Zukunft gesehen. (Eventuell auch ein nettes Projekt was man im Forum diskutieren kann)

eine Anmerkung zu dein bereitgestellten Code:

du lädst eine Konstante um das Modul einzustellen, und hinterher setzt du nochmal einzelne Bits. Ich würde entweder alles in der Konstante packen
oder alles einzelt setzen ( Dies würde ich bevorzugen da ich finde es ist lesbarer/verständlicher wenn man eine Zeile für jedes Config bit hat und man ein Kommentar hat was da passieren soll).
also Statt:
movlw    b'10110000' ;b5=0 single pulse

würde ich so schreiben:
  bsf      T1GCON,TMR1GE  ;Timer Gate Funktion einschalten 
  bcf      T1GCON,T1GPOL  ;Gate High-Low Aktive
  bcf      T1GCON,T1GTM   ;Toggle mode aus
  bsf      T1GCON,T1GSPM  ;Single Pule mode ein
  bcf      T1GCON,T1GGO   ;fertig meldung ablöschen
  bcf      T1GCON,T1GVAL  ;Status ablöschen
  bsf      T1GCON,T1GSS0  ;siehe auch T1CON
  bsf      T1GCON,T1GSS1  ;Timer1 Gate Source is (SYNCC2OUT
ausnahme wäre nur wenn aus Speicherplatzgründen man nicht so viele Befehle nutzen will/kann.
Dann würde ich beim Kommentar aber jedes Bit beschreiben.


Ottmar

Hi,
Wegen dem Speicherplatz braucht man sich bei diesem PIC noch keine Gedanken zu machenderzeit: 
Program Memory Words Used:  243          
Program Memory Words Free:  3383

Wenn ich bei mir noch noch nicht geläufigen Modulen  Ports initialisiere, ziehe ich es vor, zunächst mal so wie bei dem C2-Port-Beispiel zu initialisieren, gibt mehr Platz für Kommentare und m.E. eine besere Übersicht.

Mein Assemblerwissen gründet sich ebenfalls auf die Webseite www.sprut.de. Allerdings habe ich spruts LCD-Initialisierung ergänzt, so dass ich inzwischen meist nur noch mein 2Wire-interface verwende. Auch habe ich Anpassungen an andere, nicht mit dem HD44780-Standard kompatible LCDs vorgenommen. Na ja, hab' beim letzten Beitrag die Codeschnitzel einfach so aus meiner Versuchs-ASM rauskopiert,die wohl schon etwas zerfledert war und wieder sauber in Ordnung gebracht werden musste. Hab' eben schon reichlich darin rumgespielt. Davon kommt es auch, dass das Modul im letzen Beitrag wiederholt mit anderen Werten initialisiert dargestellt worden ist.

Jetzt sieh das so aus, habe auch schon eine erste Ausgabe im LCD:
main:
   bsf      INTCON,GIE     ;interrupt EIN
   movlw    b'00000000'    ;b7-6=00/01 Tmr1 clock 1/4MHz       DS.185
   movwf    T1CON          ;b0=0 STOP
   ;                       
   movlw    LINE2+.17      ;Ausgabeadress ins DDRAM
   CALL     OutDDRAM_Addr
   movlw    "1"            ;1 MHz 
   CALL    OutLcd_Data     ;TMR1 input Frequenz ausgeben  
                              
main_loop:
   CALL     Key_Fosc       ;Tastenabfrage,Ausgabe fosc 1 oder 4 MHz
   ;                       ;T1CON,TMR1CS1:0 einstellen.
   movlw    b'11010000'    ;b4=0 single pulse, Gate aktiv HIGH
   movwf    T1GCON         ;b5=0 Toglemode disabled für single pulse  

   CALL     TMR1_Gate
   copy     tmpTMR1H,H_Puls1  ;verwendet für Duty Cycle
   copy     tmpTMR1L,H_Puls0
   movlw    LINE1+.7         ;Ausgabe im LCD
   movwf    T1G_Addr
   CALL     Out_TMR1GM     ;fos->fosc/4D zu Dezima, LCD-Ausgabe  
   ;
   movlw	.10            ;1s waren bis zur nächsten Messung
   CALL     Delay100ms
goto main_loop:

Diese zittert in der letzten Stelle (us), liegt wohl am Aufbau und am simplen C2-Oszillator
TMR1 clock ist  fosc/4,  Interner Oszillator  fosc 4MHz 
Gate-Takt ist fout des als AMV beschalteter  C2 ( jedoch C1=100nF).
Ich lege mal dazu Bilder bei und vielleicht interessiert auch das 2-Wire-Interface.

mfG Ottmar

^Cobra

Ja das 2 wire für das lcd ist natürlich sehr schick bei so kleinen pics. Wobei es dann etwas mehr Code sein dürfte.

Wenn ich das richtig verstehe misst dein pic 2750us und der oszi 2753us.
Hört sich für mich erstmal nach ein brauchbaren Ergebnis an.


Ottmar

Hi
Das kleine DSO138 von JYETech (Bausatz damals ca. 25€) mißt bis weniger als 100kHz recht gut, hat unterhalb dieses Bereichs keine bemerkenswerten Abweichungen zu meinem Siglent. Das letzte Digit sollte man wohl bei meinem Steckbrettaufbau und dem  RC-Oszillator auch nicht sonderlich bewerten.

Die 2-Wire LCD-Init-Datei ist nicht bemerkenswert größer als eine für 4/8-Digit. Zumal bei der LCD-Ausgabe Zeit kaum eine Rolle spielt. Kann man doch wie beim 16F1827 bis zu 32MHz beim internen Takt gehen.  
Der Unterschied zum 4Bit-Interface besteht nur darin, daß die Bits für jede Übertragung eines Byte 6x durch das Schieberegister geschoben und dann von diesem und nicht von der MCU, paralle, alsl 4Bit LCD-Data + 2Bit (RS,Enable), ins LCD übertragen werden.
Dazu kann das LCD an 2 beliebige, gerade unbenutzte Pins für Data und CLK angeschlossen werden. Das gibt Freiheit in der Nutzung der Portpins, überhaupt wenn z.B. beim TIMER1 nur RB6 als externer Zähleingang (T1CKI) vorhanden ist.

Eigentlich hatte ich ja gehofft, dass sich jemand die gleiche Aufgabe stellt und sich aktiv  und praktisch mit dem T1GM beschäftigt, Na ja, warten wir mal ab.

mfG Ottmar

^Cobra

Tut mir leid, für Praktisches beschäftigen mangelt es grade an einer gescheiten Umgebung. :(

picass

#10
Hallo Jungs!
Ihr merkt schon daran, dass ich etliche Tage hier nicht reingeschaut hatte, dass bei mir Land unter ist und das ist auch sofort meine Reaktion auf das Angebot einer Beteiligung.
Leider! :'(
Das Land steht tief unter Wasser. Erstmal sowieso: es ist Sommerzeit und mein altes, geerbtes Haus versinkt im Sanierungs-Rückstau, da muss es weiter gehen. Dann steht der Sommerurlaub vor der Tür, will sagen, mit dem Auto nach Italien. Aber das Auto ist - nicht ganz so wie ich - alt und hat sich aktuell eine Altersschwäche zugelegt: die Luftfederung will nur teilweise federn, weil sie hinten irgendwo ein Löchlein hat. Wo ist umbekannt. Weil das in der orig Audi-Werkstatt zu Rep-Preisen führen kann, welche den Zeitwert des Wagens übersteigen, muss ich da ran. Tut mir sehr leid, aber ich muss präferieren.

Einziger Beitrag wird wohl sein, eine Anregung für einen sinngebenden Einsatz zu bieten. In meinem Dicken - was mein Auto ist - sitzt leider keine orig verbaute Öltemperatur-Anzeige. Eine solche hatte ich vor Jahren selbst erstellt - is klar: mit PIC drin - und die funktioniert auch immer noch gut. Aber für deren Betrieb ist ein spezieller Öl-Temperatur-Sensor in der Ölablassschraube notwendig. Wie gesagt: alles da, alles funktioniert. Aber theoretisch möglich und technisch eleganter wäre es, das Signal eines orig verbauten Doppelsensors auszulesen und für die Anzeige der Öltemp zu nutzen. Dieser Orig-D-Sensor misst gleichzeitig die Temp und die Pegelhöhe des Motoröls und gibt die beiden Ergebnisse zusammengemischt in einem seriellen Signal aus. Das wird dann natürlich später in einem Steuergerät zerlegt und verwertet, nur nicht angezeigt.

Der Sensor ist von Hella, den habe ich auch als Gebraucht-Gerät in meinem Arbeits-Keller und es gibt auch ein orig Bild der Signal-Zusammensetzung. Die Länge der 2 Haupt-Impulse stellt die Größe der Temp oder der Pegelhöhe dar. Siehe Bild.
Das wäre eine Anwendung für Komparatoren und Timer.
Grüße, picass
hella-signal.jpg

Ottmar

Mein Projekt "TMR1-Gate Modul (T1GM)" ist us meiner Sicht fertig und ich fasse mal zusammen:

Mit dem T1GM kann man
a) die Dauer zwischen zwei Flanken-Ereignissen messen
b) Ereignisse in einem bestimmten Zeitbereich zählen.
Als Timer1-Taktquelle und/oder Flankenereignisse können sowohl interne Ereignisse,als auch von außen zugeführte Ereignisse verwendet werden.

Die Messgenauigkeit ist sogar mit meinem bescheidenen Steckbrettaufbau und der Verwendung des internen Oszillators (4MHz) recht gut. Kommt es auf den letzten Zählimpuls an, benötigt man quarzstabilisierte Impulsfolgen  für den TIMER1 und/oder das Gate.

Mit dem 16bit-Timer1 und der von mir gewählten Impuls-/Flankenquellle, sind Pulsweiten HIGH oder LOW, sowie Periodendauer bis max 2^16us recht genau messbar. Der Timer verfügt über einen internen Vorteiler bis 16:1 und unter Verwendung des TMR1-Überlaufflag kann eine fast beliebige Erweiterung der Bitbreite /des Zählbereiches vorgenommen werden.

Bedenkt man, daß nicht nur der Arbeitstakt (fosc/4)sondern auch der Oszillatortakt (fosc) für die Zählimpulse des TIMER1 verwendet werden kann und daß der PIC16F1827 bis fosc 32MHz verwendbar ist, eröffnen sich sehr kurze Zeitspannen für Messungen.

Die Initialisierung des T1GM für Pulsdauer und Periode ist einfach, wie nachstehender Beispielcode zeigt.

Hauptprogramm
main:
   CALL     TM1G_Pulse_HIGH      ;22382wc (22.382ms) TMR1G-Routinen
   CALL     TM1G_Pulse_LOW
   CALL     TM1G_Periode  
   CALL     TM1G_Frequenz
   CALL     TM1G_DutyCycle 
   ;
   btfss    KeyPress,KEY1      ;wurde Taste gedrückt?
   CALL     HoldCurrentState   ;Ja Programm anhalten
   GOTO     main

Initialisierung TMR1-Gate-Modul
TM1G_Pulse_HIGH:              ;Debug 1739ms=0x06CB
   movlw    b'00000000'       ;clock fosc/4, Presc.1:1,TMR1 OFF
   movwf    T1CON  
   movlw    b'11010000'       ;TMR1G enabled,activ HIGH,sgl.puls mode,
   movwf    T1GCON            ;TMR1 Gate source TMR1 input pin RB0
   CALL     TMR1_Gate

TM1G_Periode:                 ;Debug 8251us=0x203B
   movlw    b'00000000'       ;clock fosc/4, Presc.1:1,TMR1 OFF
   movwf    T1CON  
   ;
   movlw    b'10110000'       ;enabled,activ LOW,sgl.puls mode,
   movwf    T1GCON            ;TMR1 Gate source TMR1 input pin RB0
   CALL     TMR1_Gate

TMR1_Gate: 
   clrf     TMR1H             ;vlear TIMER 1
   clrf     TMR1L
   bsf      T1CON,TMR1ON   ;b0=1 Start TMR1
   bsf      T1GCON,T1GGO   ;b3=1 Gate startbereit wartet auf Flanke
   btfsc    T1GCON,T1GGO   ;Gate geschlossen? T1GGO=0? 
   GOTO     $-1
   copy     TMR1H,tmpTMR1H  ;TMR1:H in Arbeitsvariable kopieren 
   copy     TMR1L,tmpTMR1L
   RETURN

Interne Komparatoren - Verwendung von C2 Als astabiler Multivibrator

Die Komparatoren C1,C2 lassen sich unabhänging betreiben und können rasch programmiert werden. Die Impulse meines mit dem C2 aufgebauten AMV haben eine Flankensteilheit (1-90%) von ca. 68ns.
Mt 2 Widerständen und einem Kondensator lassen sich, wie die unten stehende Tabelle zeigt, variable Frequenzen erzeugen.

Ebenso einfach ist die Initialisierung des Komparators C2:
   BANKSEL  TRISA          ;bank1
   clrf     TRISA
   bcf      TRISA,RA4      ;(03) Comparator2 C2OUT 
   bsf      TRISA,RA3      ;(02) "           C2IN-
   bsf      TRISA,RA2      ;(03) "           C2IN+
   BANKSEL  ANSELA         ;bank3
   clrf     ANSELA         ;RB7:0 digital IO
   bsf      ANSELA,RA3     ;(02) Comp.2 analog  C2IN-
   bsf      ANSELA,RA2     ;(03) "    " "       C2IN+   

;--Komparator C2
   BANKSEL  CM2CON0        ;bank2 S.162ff, 170
   movlw    b'10100000'    ;vgl. MACROS.INC
   movwf    CM2CON0
   bsf      CM2CON0,C2HYS   ;Hysterese 65mV
   ;
   movlw    b'00000011'     ;11 = C2VN connects to C12IN3- pin RA3
   movwf    CM2CON1

Die Bauteile in der von mir am 26.6. mitgeeiltenSchaltung können weitgehend veränert werden und erlauben eine vielfältige Variation der Pulsbreiten bzw. der Periode.

Allgemeines zum C2-Komparatormodul
Die Komparatoren C1,C2 lassen sich unabhänging betreiben und können rasch programmiert werden. Die Impulse meines mit dem C2 aufgebauten AMV haben eine Flankensteilheit (1-90%) von ca. 68ns. 

Nachstehend eine Übersicht zu den Ergebnissen bei unterschiedlicher Bemessung von C1 (Schaltung aus meinem Beitrag vom 26.06.2024).
C1           2,2uF  680nF 100nF  22nF  1nF    Cx*
fmin (Hz)ca. 15     34    377	 675   15800  ?
fmax (Hz)ca. 18     60    418	 1180  27700  460kHz
Cx* C1 ist die parasitäre Kapazität zwischen  benachbarten 
Steckbrettkontakten.

mfG Ottmar

Ottmar

Hallo piicass
habe erst jetz Deinen Beirag richtig gelesen. Das von mir beschriebene TIGM köönte doch hilfreich sein:
Die Startsequenz aussortieren, dann die beiden Pulse als Gate verwenden und die
Zählimpulse während der Gatephase ins Verhältnis zu Ölstand und Öltemperatur setzen....?
TIMER1-Zähltakt kann ja mit dessen Vorteiler an die Gate-Zeiten angepasst werden.

mfG Ottmar


Ottmar

@picass

Zitat von: picass in 30.06.2024, 10:42:35 CESTDie Länge der 2 Haupt-Impulse stellt die Größe der Temp oder der Pegelhöhe dar. Siehe Bild.
Das wäre eine Anwendung für Komparatoren und Timer.
Grüße, picass
Dein Lieblingspic 18F14K22 hat zwar kein Timer1 Gate-Modul, dafür aber Capture, das wohl auch für diesen Zweck eingesetzt werden kann. Auch hier kann der TIMER1-Count zwischen zwei Flanken erfasst werden.
0100 = Capture mode, every falling edge
0101 = Capture mode, every rising
vgl. Datenblatt zu  18F14K22 "13.0 ENHANCED CAPTURE/COMPARE/PWM(ECCP) MODULE

mfg Ottmar

Ottmar

Hallo
Indem ich gerade beim vorangegangenen Thema war, habe ich mir auch gleich noch den Capture-Mode angeschaut.

Capture Mode
Dieser bietet die Möglichkeit 1, 4 oder 16  ansteigende Flanken einer Impulsfolge "einzufangen". Eine fallende Flanke ist nur als Einzelereignis zu erfassen. Will man nur die Zeit für High oder Lowpegel erfassen, kann zwischen den unterschiedlichen Flanken umgeschaltet werden.

Bei der Erfassung von 4 und 16 rising edges erhält man nach 2maligem, bzw. 4maligem  Rechtschieben von CCPR1H:L die durchscnittliche Periodendauer und damit eine verbesserte Genauigkeit.
Beiliegende Codebeispiele zeigen die Initialisierung des Capture-Mode (CCP1).
vgl. Anlage 05 Code-Auszug Capture & C1.pdf

Vorverstärker/Comparator C1 für Analogsignale
Um die Schaltung universeller zu verwenden, wurde der unabhängige interne Comparaor C1 des PIC16F1827 so beschaltet und programmiert, daß dieser auch niedrigere Eingangspegel von Anlogsignalen auf TTL-Niveau umformt und so deren Periodendauer messbar macht.
Je nach Beschaltung ist die erforderliche Hysterese und der Triggerpegel in weitem Bereich durch die Beschaltung einstellbar (siehe Schaltplan)

Ein wenig Fleißarbeit ist es, die Zuordnung der invertierenden und nicht invertierenden Eingänge zu den Portpins herauszufinden. Hinweise auf die Seite im Datenblatt erfolge z.B. so: >DS.185<.

Bilder:
01 Ausgabe von Capture(4,16 )Rising Edge (verschieden Modi). Das "H" in Zeile 2, ganz rechts bedeuted, daß der Programmlauf angehalten wurde um auch die letzte, sstets wechselnde Stelle
ablesen zu können
02 Osziilogram Sinus 500mV/Teil, Rechteck 1,44V/Teil  mit deutlicher 
      Hysterese  (DeltaY = 0,51V)
03 LTspice Schaltung, mit OPA TS812 als Beispiel
04 Signalverlauf mit LTspice. die grüne Linie (Vout) liegt etwa in der
      Größenordnung von Uf der Schutzdiode am Eingang unter dem 0V-Niveau.
     grün: Vout Vp 5V
     blau: Input Sinus Vpp 4V,
     gelb: Triggerschwelle
     lila: Sinus und Hysterese direkt am nicht invert. Eingang, entsprechend, dem dortigen Spannungsteiler 
          10k-10k. Siehe dazu das "echte"Oszillogram Bild 2
05 Code-Auszug Capture & C1.pdf

Schnellantwort

Name:
Verifizierung:
Bitte lassen Sie dieses Feld leer:
Geben Sie die Buchstaben aus dem Bild ein
Buchstaben anhören / Neues Bild laden

Geben Sie die Buchstaben aus dem Bild ein:

Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau

Similar topics (1)