Тема: STM32 генератор импульсов (PWM) 64МГц
Здравствуйте
А как добавить еепром чтобы после выключения и включения частота была такой как до выключения ?
Моя попытка не работает.
//http://rcl-radio.ru/?p=68958
#include <Wire.h>
HardwareTimer pwmtimer4(4);
#include <LiquidCrystal.h>
LiquidCrystal lcd(PA0, PA1, PA2, PA3, PA4, PA5);
#include <EEPROM.h>
long int del=1,mn=1,pg=0, f_g=2, imp = 1, hhh = 0;
float f;
void setup() {
lcd.begin(16, 2);
pinMode(PB0, PWM); // имп. выход
pinMode(PB7, PWM);
pinMode(PB14,INPUT_PULLDOWN); // +
pinMode(PB12,INPUT_PULLDOWN);// -
pinMode(PB11,INPUT_PULLDOWN);// х1 х10 x100 x1000
pinMode(PB13,INPUT_PULLDOWN); // PG / PWM
pinMode(PB7, PWM); //Tx
pwmtimer4.pause();
pwmtimer4.setPrescaleFactor(del);
pwmtimer4.setOverflow(f_g-1);// /2
pwmtimer4.setCompare(TIMER_CH2, imp);// меандр
pwmtimer4.refresh();
pwmtimer4.resume();
EEPROM.read(500, (uint16*)&f);
}
void loop() {
if(digitalRead(PB5)==HIGH&&pg==0){pg=1;f_g=100, imp = 50;lcd.clear();delay(300);}
if(digitalRead(PB5)==HIGH&&pg==1){pg=0;f_g=2;imp = 1;lcd.clear();delay(300);}
if(pg==0){
if(digitalRead(PB11)==HIGH){mn=mn*10;if(mn>1000){mn=1;}}
if(digitalRead(PB14)==HIGH){del=del+mn;if(del>65535){del=65535;}pwmtimer4.setPrescaleFactor(del);}
if(digitalRead(PB12)==HIGH){del=del-mn;if(del<1){del=1;}pwmtimer4.setPrescaleFactor(del);}
lcd.setCursor(0, 0);lcd.print("F = ");
f = 64000000/(1*del);
pwmtimer4.setOverflow(f_g-1);// /2
pwmtimer4.setCompare(TIMER_CH2, imp);// меандр
if(f>1000000){lcd.print(f/1000000,3);lcd.print(" MHz ");}else{lcd.print(f/1000,3);lcd.print(" kHz ");}
lcd.setCursor(0,1);
lcd.print("x");lcd.print(mn);lcd.print(" ");lcd.setCursor(6,1);lcd.print("d");lcd.print(del);lcd.print(" ");lcd.setCursor(13,1);lcd.print("PG ");
} // pg = 0
if(pg==1){
lcd.setCursor(0, 0);
lcd.print("F = ");f = 64000000/(1*del)/50;
if(digitalRead(PB11)==HIGH&&hhh==0){mn=mn*10;if(mn>1000){mn=1;hhh=1;}delay(300);}
if(digitalRead(PB11)==HIGH&&hhh==1){mn=1;hhh=0;delay(300);}
if(hhh==0){
if(digitalRead(PB14)==HIGH){del=del+mn;if(del>65535){del=65535;}pwmtimer4.setPrescaleFactor(del);}
if(digitalRead(PB12)==HIGH){del=del-mn;if(del<1){del=1;}pwmtimer4.setPrescaleFactor(del);}
}
if(hhh==1){
if(digitalRead(PB14)==HIGH){imp++;if(imp>100){imp=100;}}
if(digitalRead(PB12)==HIGH){imp--;if(imp<0){imp=0;}}
}
pwmtimer4.setOverflow(f_g-1);// /2
pwmtimer4.setCompare(TIMER_CH2, imp);// ШИМ
if(f>1000000){lcd.print(f/1000000,3);lcd.print(" MHz ");}else{lcd.print(f/1000,3);lcd.print(" kHz ");}
lcd.setCursor(0,1);
if(hhh==0){lcd.print("x");lcd.print(mn);}
if(hhh==1){lcd.print("%");lcd.print(imp);}
lcd.print(" ");lcd.setCursor(6,1);lcd.print("d");lcd.print(del);lcd.print(" ");lcd.setCursor(13,1);lcd.print("PWM");
}
delay(300);
EEPROM.write(500, f);
}