Zero cross detektion for 220VAC med PIC18F452

L

losturcos

Guest
Hej, jeg forsøger at fornemme nul kryds for 220VAC med PIC microcontroller, PIC18F452. Jeg har læst AN521 mikrochip ansøgning notat, som giver teorien til detektering af nul-kryds med kun én modstand. I app note eksempel controller er PIC16C5X der har input beskyttelse dioder internt. Mit spørgsmål er, er disse dioder findes i 18F452? Jeg kunne ikke se det på databladet. Jeg har forberedt en lille kreds i Proteus. Jeg kunne ikke få et resultat. Jeg har kun tilsluttet en sinus 220VAC / 50 Hz til porta.1, og prøvede at fornemme det. Har jeg misforstået noget. Tak.
 
De beskyttelse dioder er på alle billeder (faktisk på næsten alle ICs). Keith
 
Tak for hurtigt svar. Hvad kan være min fejl? Jeg tester med et "hvis" i ", mens (1)" loop til at se på noget tidspunkt det passerer til nul.
 
Fejlkonfiguration af havnen pins? Software bug? Er din sinusbølge centreret omkring 0V? Er det noget Proteus kan simulere korrekt? Uden mere information kan vi kun gætte. Keith
 
Jeg tror ikke en fejlkonfiguration eksisterer. Skal jeg konfigurere input som analog indgang? Anyway, jeg har prøvet begge dele.
Code:
 while (1) {if (inputR) outputR = 1, ellers outputR = 0;}
Dette er hvad alle jeg gør, at se om det sanser. TRIS registre er konfigureret. Bemærk: inputR og outputR er konfigureret port pins.
 
Driften af ​​de enkelte stift vælges ved at rydde / indstille styrebit i ADCON1 registret (A / D Kontrol Register1) [/color] Bemærk:. På en Power -on Reset, RA5 og RA3: er RA0 konfigureres som analoge indgange og læses som '0 '. RA6 og RA4 er konfigureret som digitale indgange.
Det kan meget vel være en "fejlkonfiguration" problem, men medmindre du sende hele din kode, vil vi aldrig vide. BigDog
 
Programmet er som nedenfor, er det skrevet i CCS C.
Code:
 # include # include # sikringer HS, NOWDT, PROTECT, NOLVP, / * BORV42 * / NOBROWNOUT, PUT # define ANALOG_PINS AN0 # enheden HIGH_INTS = SAND # enhed ADC = 10 / / # brug forsinkelse (ur = 20.000.000, restart_wdt) / / # BIT inputR = PORTB.6 # BIT outputR = PORTB.0 main () {port_b_pullups (falsk) / / setup_adc_ports (ANALOG_PINS), setup_adc (ADC_CLOCK_DIV_32) , set_adc_channel (2) / / setup_lcd (LCD_DISABLED) TRISA = 0b11111111 / / TRISB = 0b11111000 / / TRISC = 0b00000000 / / TRISD = 0b00000000 / / TRISE = 0b00000000 / / PORTC = 0; PORTB = 0 / / PORTA = 0; PORTD = 0, mens (1) {if (inputR) {outputR = 1;} else {outputR = 0;}}}
 
Af den måde, havde jeg ændret indgangsporten som portb.6 anderledes fra begyndelsen.
 
PORTB.6 er et programmeringssprog pin. Tjek venligst at din programmør ikke er tilsluttet under din test! Og jeg foreslår at bruge følgende definere: # BIT outputR = LATB.0
 
Jeg har prøvet andre stifter, også. Også jeg har prøvet som # BIT inputR = LATB.6 eller LATB.4, også. Og jeg gør testene i Proteus, så der er ingen programmør enhed. Jeg har sat et "On forandring" betingelse for PORTB i simuleringen, som ikke ændres, også. Hvad kan problemet være?
 
Hvordan du genererer AC input sekvens på din skematisk? Kunne du dele skematiske, du bruger? Eller tjek signalet på dit input pin hjælp oscilloskop vindue.
 
Sinus generatoren og kredsløbet er som nedenfor. Jeg har indstillet frekvens som 10 Hz. at gøre det lettere at se den bølge. [ATTACH = CONFIG] 69.900 [/ATTACH] [ATTACH = CONFIG] 69.901 [/ATTACH]
 
Din kilde er forkert, burde det have udlignet 0 og amplitude 220 Volt
 

Welcome to EDABoard.com

Sponsor

Back
Top