Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <targets\AT91SAM7.h>
- #include "pcf8833u8_lcd.h"
- #include <ctl_api.h>
- #include <stdio.h>
- char b[4] = {0};
- char procent[4] = {0};
- int p = 550;
- int loop = 510;
- int a = 0;
- void wyswietl(char b) {
- // sprintf("%.f", 12);
- ADC_CR = 1<<1; // lub ADC_CR_START; // start konwersji na aktywnych kanałach
- while ((ADC_SR & ADC_SR_EOC5) == 0) {} // dopóki flaga EOC6 jest rowna 0 (konwersja na kanale 6 nie zakończona - rób nic)
- sprintf(b, "%d.%d", 20+((ADC_CDR5-530)/5), ADC_CDR5 % 100);// wykonaj akcję przypisaną do konwersji
- LCDPutStr(b, 55,50,LARGE,WHITE,BLACK);
- }
- void TIMER0_ISR () {
- // wyswietl(b);//zmiana stanu LCD_BL
- p = ADC_CDR5;
- loop = loop + 1;
- ADC_CR = 1<<1; // lub ADC_CR_START; // start konwersji na aktywnych kanałach
- while ((ADC_SR & ADC_SR_EOC5) == 0) {} // dopóki flaga EOC6 jest rowna 0 (konwersja na kanale 6 nie zakończona - rób nic)
- sprintf(b, "%d.%d", 20+((p-530)/5), p % 10);
- sprintf(procent, "%d", a / 200);// wykonaj akcję przypisaną do konwersji
- LCDSetPixel(131 - p, loop, BLACK);
- if (loop > 641) {
- LCDClearPlot();
- loop = 510;
- }
- LCDPutStr(b, 20,50,LARGE,WHITE,BLACK);
- LCDPutStr(procent, 20,10,LARGE,WHITE,BLACK);
- // LCDClearPlot();
- TC0_SR; // na początku pusty odczyt rejestru statusu - kasowanie flagi przerwania CPCS
- }
- void TIMER0_ISR1 () {
- int isr = PIOB_ISR;
- if (isr & (1<<24)) {
- TC0_CCR |= (1<<1);
- } else if (isr & (1<<25)) {
- TC0_CCR |= (1<<2) | (1<<0);
- }
- PIOB_ISR;
- }
- int pomiar(){
- // w rejestrze ADC_MR możliwe również ustawienia niższej rozdzielczości
- return ADC_CDR5;
- }
- int main(void){
- char b[7];
- InitLCD();
- LCDClearScreen();
- Backlight(BL_ON);
- ctl_global_interrupts_disable();
- PMC_PCER |= (1<<3) | (1<<12) | (1<<17) | (1<<10); // Power management controller (s. 30 datasheet);
- PIOB_PDR = (1<<20);
- PIOB_ASR = (1<<20);
- PWM_CMR1 = (1<<3);
- PWM_ENA = (1<<1);
- PWM_CPRD1 = 1840;
- PIOB_ODR |= (1<<24) | (1<<25);
- PIOB_IER |= (1<<24) | (1<<25);
- TC0_CCR = (1<<1);
- TC0_SR;
- TC0_CMR = (1<<2) | (1<<14);
- TC0_IER= (1<<4);
- TC0_RC = 9400;
- // konfiguracja ADC, konwersja wartości napięcia z kanału 3 przetwornika:
- ADC_CR = 1 << 0; // lub ADC_CR_SWRST – to inny zapis tego samego – reset przetwornika
- ADC_CHER = (1 << 5) | (1 << 6); // aktywowanie kanałów na których ma być przeprowadzona konwersja
- ADC_IDR = 0xFFFFF; // świadomie wyłączamy przerwania od wszystkich zdarzeń(źródeł) z ADC
- ADC_MR = (23<<ADC_MR_PRESCAL_BIT) | (2<<ADC_MR_STARTUP_BIT) | (1<<ADC_MR_SHTIM_BIT);
- ctl_unmask_isr(3);
- ctl_set_isr(12,1,CTL_ISR_TRIGGER_FIXED,TIMER0_ISR,0);
- ctl_set_isr(3,2,CTL_ISR_TRIGGER_FIXED,TIMER0_ISR1,0);
- ctl_unmask_isr(12);
- // ctl_unmask_isr(3);
- ctl_global_interrupts_enable();
- TC0_CCR |= (1<<2) | (1<<0);
- while(1){
- loop = loop + 1;
- // sprintf(b, "%d.%d", 20+((pomiar()-530)/5), pomiar() % 10);// wykonaj akcję przypisaną do konwersji
- // LCDPutStr(b,55,50,LARGE,WHITE,BLACK);
- while ((ADC_SR & ADC_SR_EOC6) == 0) {}
- a = ADC_CDR6;
- a = a * 2;
- PWM_CDTY1 = a;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement