Moin Leute,
ich hab mich dem PIC16F1827 zugewendet weil ich einen kleinen µC für ein
kleines Gerät haben wollte.
Bisher hab ich alles nur simuliert, gerade weil ich mit dem CCP-Modul
noch nicht so gearbeitet hab.
Genau dort liegt auch mein Problem, ich hab mit APFCON0 den Pin von RB6
auf RA7 umgelegt, teste ich den Code in Proteus hab ich das PWM-Signal
auf RB6...eigentlich wollte ich an RA6 und RA7 einen Piezo hängen. Ich
hab später nur eine CR3210 (zumindest nur eine Kopfzelle) und ich möchte
den Piezo irgendwie richtig laut bekommen. Den WDT hab ich erstmal
aussen vor gelassen.
Über jede Anregung freu ich mich auf jedenfall...den Code poste ich hier
einfach rein, denke mal bei der größe des Codes geht das noch.
1
// PIC16F1827 Configuration Bit Settings
2
3
// 'C' source line config statements
4
5
// CONFIG1
6
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
Ok, ich war etwas unpräzise!
Die Batterie ist eine CR2032, Proteus V8.4, die Frage ist ob ich einen
Fehler im Code hab, weil ich nur eine Ausgabe der PWM über RB6 sehe.
Ich war der Ansicht das ich enhanced PWM auf Half Bridge gestellt hab
und über P2A und P2B ausgebe, wobei ich ja oben APFCON0 mit P2A und P2B
auf RA6 und RA7 hab, der Analogteil ist auch auf digital. Warum nur
blinkt dann RB6 wie ein Weihnachtsbaum koppkratz.
MfG
BeastyK
Moin,
danke für die Idee mit
Profiprog schrieb:> APFCON0 = 0b00001000;
das hat mich leider nicht weiter gebracht, hab den Teil in dem Setup
auch hinter die I/O-Port Initialisierung gesetzt, der Erfolg blieb
allerdings aus.
Man darf sich nicht selbst trauen und
BeastyK schrieb:> //----- CCP2 Control> Register----------------------------------------------> CCP2CON = 0b11001100;
macht mir keine Half-Bridge, wie ich wollte, sondern ne Full Bridge,
also schnell korrigieren:
1
//----- CCP2 Control Register ----------------------------------------------
Mit DCxB was die beiden letzten Bits des 10bit PWM Signals sein soll
konnte ich nicht wirklich etwas anfangen und hab beide auf 0 gesetzt.
Also: RA7 (P2A) blinkt nun freudig vor sich hin, was darauf schließen
läßt das das Mapping von RB6 auf RA7 funktioniert hat und die
Half-Bridge auch eine solche ist.
RA6 (P2B) tut es aber nicht und RB7 blinkt obwohl es nicht mehr sollte.
Ich hab auch festgestellt das RB3 an geht und ich ihn extra mit
TRISBbits.TRISB3 = 1 wieder ruhigstellen muß.
Ich schick nochmal den setup Teil rüber:
1
void setup(void){
2
3
// WDTCONbits.WDTPS = 0b10000;
4
//----- I/O Port -----------------------------------------------------------
5
ANSELA = 0b00000000;//All Digital I/O without RA0 and RA1
6
ANSELB = 0b00000000;//All Digital I/O
7
TRISA = 0b00100011;//All Output without RA0 and RA1 (RA5 is Input Only)
8
TRISB = 0b00000110;//All Output without RB1 and RB2
9
PORTA = 0b00000000;
10
PORTB = 0b00000000;
11
//----- Oscillator Control Register ----------------------------------------
12
TRISBbits.TRISB6 = 1;
13
TRISAbits.TRISA6 = 1;
14
TRISAbits.TRISA7 = 1;
15
//----- Alternate Pin Function Control Register: CCP2/P2A & P1C from RB6 -> RA7 --
Moin,
ich war hier etwas auf dem Holzweg, ich hab ja den Timer2 benutzt und
P1C brauch ich ja garnicht mit umpinnen.
BeastyK schrieb:> //----- Alternate Pin Function Control Register: CCP2/P2A & P1C from RB6> -> RA7 --> APFCON0 = 0b00001010;
im Grunde wunderte ich mich über RB7 (P2B) und warum der noch läuft,
wenn man aber das richtige Bit an der richtigen Stelle setzt
funktioniert das auch:
bit 4 P2BSEL: Pin Selection bit
0 = P2B function is on RB7
1 = P2B function is on RA6
bit 3 CCP2SEL: Pin Selection bit
0 = CCP2/P2A function is on RB6
1 = CCP2/P2A function is on RA7
also APFCON0 = 0b00011000
Nun wollte ich ja mit der Half-Bridge das P2A auf High ist während P2B
auf low liegt, das CCP2 Control Register hab ich deshalb wie folgt
initialisiert:
BeastyK schrieb:> //----- CCP2 Control Register> ----------------------------------------------> CCP2CON = 0b10001101; // 10 = Half-Bridge output, XX - DCxB????,> //1101 = PWM mode: PxA, PxC active-high; PxB,> PxD active-low
Leider ist das ausgegebene Rechtecksignal so dass P2A auf High ist und
P2B auch, also nicht so wie ich dachte das es ist. Hab ich das
Datenblatt da falsch verstanden?
Ich hab hier einen Piezo mit 4,4KHz Resonanzfrequenz, von Reichelt, weiß
jemand ob der mit 3,3V noch einen pieps von sich gibt?
MfG
BeastyK