Новичок
Регистрация: 28.04.2011
Сообщений: 2
Репутация: 10
|
И так начну сначала.
Вот решил сделать сибе приборчик на МК что то вроде одно-канального USB осциллографа и перед тем как мучать настоящие железки стал тестить устройство в Proteus 7.7 и столкнулся вот с какой проблемкой при замере частоты до 400герц все работает нормально, а начиная с 400 и до 1000герц измерения начинают брихать на 1герц ну и все что выще 2000герц погрешность 2 герца и тд. Вот в чем вопрос может ли симулятор давать мне такую лажу или это я все таки напортачил где то? программа на Pascal Код:
program asc; //------------------------------------------------------------------------------ // LCD module connections var LCD_RS : sbit at PORTD2_bit; var LCD_EN : sbit at PORTD3_bit; var LCD_D4 : sbit at PORTD4_bit; var LCD_D5 : sbit at PORTD5_bit; var LCD_D6 : sbit at PORTD6_bit; var LCD_D7 : sbit at PORTD7_bit; var LCD_RS_Direction : sbit at DDD2_bit; var LCD_EN_Direction : sbit at DDD3_bit; var LCD_D4_Direction : sbit at DDD4_bit; var LCD_D5_Direction : sbit at DDD5_bit; var LCD_D6_Direction : sbit at DDD6_bit; var LCD_D7_Direction : sbit at DDD7_bit; // End LCD module connections var counter, lcd_counter: integer; text_0, cloc_txt: array[11] of char; //------------------------------------------------------------------------------ procedure Timer2Overflow_ISR(); org IVT_ADDR_TIMER2_OVF; begin inc(lcd_counter); end; procedure Interrupt_2(); iv IVT_ADDR_INT2; begin inc(counter); end; begin { Main program } OSCCAL:= 0x7F; //------------------------------------------------------------------------------ SREG_I_bit:= 1; INT2_bit:= 1; TOIE2_bit:= 1; TCCR2:= 5; ASSR:= 255; //------------------------------------------------------------------------------ Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); ByteToStr(Clock_MHz, cloc_txt); LCD_Out(1, 2, 'SNG ST - '+cloc_txt+'MHz'); //----------------------------------------------------------------------------- DDRB:= 0xFF; counter:= 0; lcd_counter:= 0; while TRUE do begin if lcd_counter >= 3 then begin TOIE2_bit:= 0; IntToStr(counter div 3, text_0); counter:= 0; LCD_Out(2, 1, text_0+'Hz'); lcd_counter:= 0; TOIE2_bit:= 1; end end end. схема |
||
Оценка
|
Новичок
Регистрация: 05.08.2008
Сообщений: 1
Репутация: 10
|
А что мешает сделать макет с реальным железом? мега16 - ширпотреб, продается даже на захудалых радиорынках, к тому же не такое дорогое удовольствие. И, наверное, все таки частотомер; на осцилл меги не хватит, даже при всем желании
|
||
Оценка
|
Гуру
Регистрация: 13.05.2006
Сообщений: 3,908
Репутация: 1247
|
Я одно время фанател от протеуса, потом после нескольких его глюков решил не тратить время на выяснение-мой это глюк или симулятора. Что касается вашего случая, то очень смахивает на классическую ошибку на 1. Пример:
-есть область памяти с адресами от 0 до 10 -необходимо вычислить длину блока от 3 до 7 -вычисляем 7-3= получаем четыре -реально 3.4.5.6.7 имеем пять |
||
Оценка
|
Новичок
Регистрация: 28.04.2011
Сообщений: 2
Репутация: 10
|
в общем придется липить макет единственное но это FT232RL которая не выпускается PDIP корпусах (ЖКИ на схеме висит лиш для контроля выполнения в протеусе) которого в наличии как железки нет, а сама приставка будит USB-шная ...
по сути мне от него требуется замеры не больше 3Мгц так что с тактом в 16Мгц он вполне сможет мерить до 6,4Мгц ну а это в двое больше чем нужно так что хватит еще и с запасом ... спасибо за разъяснения пойду ли пить макет .. если чо получится то скину схему и прошивку |
||
Оценка
|
Ответ |
Метки |
atmega16, proteus, погрешность |
Похожие темы |
|
|
Обратная связь РадиоЛоцман Вверх |