Крымский форум (Crimea-Board) Поиск Участники Помощь Текстовая версия Crimea-Board.Net
Здравствуйте Гость .:: Вход :: Регистрация ::. .:: Выслать повторно письмо для активации  
 
> Рекламный блок.
 

Реклама на форуме

 
> Ваша реклама, здесь
 
 
 

Страницы: (2) 1 2  ( Перейти к первому непрочитанному сообщению ) Start new topic Start Poll 

> Проблема со стабилизатором напряжения, самопал :)
svip | Профиль
Дата 20 Декабря, 2008, 21:04
Quote Post




Group Icon

Группа: Gold Member
Сообщений: 1537
Регистрация: 30.11.06
Авторитет: 13
Вне форума

Предупреждения:
(0%) -----


НЕ прокатил этот вариант. часа два проработал и сдох один из предохранителей. (пробовал разные варинаты задержки) - все равно сдыхает. Нужно будет нарисовать всю схему и прошивку, может где напортачил.


____________________
Двое всегда договорятся, если хотя бы один из них не дурак.
PMEmail Poster
gccrim | Профиль
Дата 20 Декабря, 2008, 21:25
Quote Post




Group Icon

Группа: Silver Member
Сообщений: 850
Регистрация: 02.07.06
Авторитет: 3
Вне форума

Предупреждения:
(0%) -----


Задержку 20mS сам делаешь или библиотечную функцию используеш? Лучше делать самому, на любом из свободный таймеров, а не на NOP-ах.

Еще смотреть на какой частоте запущен контроллер и от чего тактируется.
Какие фьюс биты прошиваются?
PMEmail Poster
svip | Профиль
Дата 20 Декабря, 2008, 22:18
Quote Post




Group Icon

Группа: Gold Member
Сообщений: 1537
Регистрация: 30.11.06
Авторитет: 13
Вне форума

Предупреждения:
(0%) -----


задержку делал библиотечной delay_ms()
частота 1 (или 4) МГц от внутреннего RC.
фьюзы никакие не прошивал, кроме отключение JTAG (у меги 16)


____________________
Двое всегда договорятся, если хотя бы один из них не дурак.
PMEmail Poster
gccrim | Профиль
Дата 20 Декабря, 2008, 22:49
Quote Post




Group Icon

Группа: Silver Member
Сообщений: 850
Регистрация: 02.07.06
Авторитет: 3
Вне форума

Предупреждения:
(0%) -----


О... ну так с этого и надо было начинать.

Частоту тактирования надо устанавливать однозначно, это ведь не операционка.

Библиотечные delay_ms() просто выполняют некоторое кол-во NOPов, при этом полагаясь на "какую-то" константу которая должна соответствовать тактовой частоте. Что то вроде:
#define Fclk 1200000
в Libr_Name.h файле.

По опыту знаю, лучше писать процедуру задержки самому используя какой либо таймер.


Что касается фьюс битов, то хоть они и называются битами, физически записываются в контроллер побайтово. И если их писать, то устанавливать надо все. Иначе ХЗ что запишится на место неустановленных.
Тем более что фьюсы определяют кучу основных параметров, в том числе и источник тактирования, коэффициент деления тактовой, вотчдог и пр.

Вообщем, нет никакой гарантии, что 20mS пауза действительно длится именно это время.
PMEmail Poster
svip | Профиль
Дата 21 Декабря, 2008, 20:06
Quote Post




Group Icon

Группа: Gold Member
Сообщений: 1537
Регистрация: 30.11.06
Авторитет: 13
Вне форума

Предупреждения:
(0%) -----


Цитата
Частоту тактирования надо устанавливать однозначно, это ведь не операционка.

так установлена 1 мгц. пробовал и 4 мгц тоже.

прошивал avr studio. И фьюзы зашиты те которые были зашиты при производстве, менял только JTAG(Отключил), и поставил тактовую частоту (1 мгц + 64ms).

Вот вся прошивка (тут без Ваших изменений)
Цитата
#include <mega16.h>
#include <delay.h>
#include <stdlib.h>
#include <math.h>

#define ADC_VREF_TYPE 0x20

// Alphanumeric LCD Module functions
#asm
  .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>


// Declare your global variables here

unsigned int i;
unsigned int f1=0;
unsigned int f2=0;
unsigned int v_in;
unsigned int v_out;
unsigned int volt;
unsigned char fout;
unsigned char er=0;
unsigned int Vpr=0;
             


void lcd_clear_my()
{
lcd_gotoxy(6,0);
lcd_putsf("          ");
lcd_gotoxy(6,1);
lcd_putsf("          ");
}

void in(unsigned int v_in)
{
  int temp[4];
  if (f2>=10){lcd_clear_my();f2=0;}
  else f2++;
  //lcd_clear();
  lcd_gotoxy(0,0);
  lcd_putsf("INPUT ");
  itoa(v_in,temp);
  lcd_puts(temp);
  lcd_putsf(" VOLT");
}


void out(unsigned int v_out)
{
  int temp[4];
  if (f1>=10){lcd_clear_my();f1=0;}
  else f1++;
  lcd_gotoxy(0,1);
  if (er==1) lcd_putsf("OUT OF 140-260");
  else
  {
    itoa(v_out,temp);
    lcd_putsf("OUTPUT ");
    lcd_puts(temp);
    lcd_putsf(" VOLT");   
  } 
}


void FU(unsigned int v_in)
{
  if (v_in<100) {fout=0b00000000; er=1;}
  else if (v_in<160) {fout=0b00000001; er=0;}
  else if (v_in<180) {fout=0b00000010; er=0;}
  else if (v_in<200) {fout=0b00000100; er=0;}
  else if (v_in<220) {fout=0b00001000; er=0;}
  else if (v_in<240) {fout=0b00010000; er=0;}
  else if (v_in<260) {fout=0b00100000; er=0;}
  else {fout=0b00000000; er=1;}
  PORTC=fout;
}

unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
         


void main(void)
{
PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0xff;

TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x00;

ACSR=0x80;
SFIOR=0x00;
 
ADMUX=ADC_VREF_TYPE & 0xff;

ADCSRA=0x81;                 

lcd_init(16);

while (1)
      {
        v_in=0;
        v_out=0;
       
        for (i=0;i<100;i++)
        {
          volt=read_adc(1);
          Vpr=(float)volt;
          v_in=fmax(v_in,Vpr);
        }
        if (v_in > 126) v_in=(v_in-127)*3.43678;
        else v_in=0;
       
        for (i=0;i<100;i++)
        {
          volt=read_adc(0);
          Vpr=(float)volt;
          v_out=fmax(v_out,Vpr);
        }
        if(v_out>126) v_out=(v_out-127)*3.43678;
        else v_out=0;
        in((int)v_in);
        out((int)v_out);
        FU((int)v_in);
      };
}


Схему нарисую - скину, нужно вспоминать что там да как делал.


____________________
Двое всегда договорятся, если хотя бы один из них не дурак.
PMEmail Poster
4/5349   
svip | Профиль
Дата 21 Декабря, 2008, 21:12
Quote Post




Group Icon

Группа: Gold Member
Сообщений: 1537
Регистрация: 30.11.06
Авторитет: 13
Вне форума

Предупреждения:
(0%) -----


Вот схема прибора:
Присоединённое изображение

Показаны только 1 и 6 каналы. Трансформатор - автотрансформатор. шаг 20В от 160В до 260В выходы.
Переключение по входу. от 220В (4 вывод) отходит выход. Вход идет через симисторы на одну из обмоток.


____________________
Двое всегда договорятся, если хотя бы один из них не дурак.
PMEmail Poster
gccrim | Профиль
Дата 21 Декабря, 2008, 21:52
Quote Post




Group Icon

Группа: Silver Member
Сообщений: 850
Регистрация: 02.07.06
Авторитет: 3
Вне форума

Предупреждения:
(0%) -----


Цитата
так установлена 1 мгц. пробовал и 4 мгц тоже.
прошивал avr studio. И фьюзы зашиты те которые были зашиты при производстве, менял только JTAG(Отключил), и поставил тактовую частоту (1 мгц + 64ms).


Не имеет значение, чем прошивать. Сам интерфейс записи фьюсов организован так, что они не могут шится каждый отдельно. И если каждый из них не указать явно, то прошьется то значение которое программатор(AVR студия) считает "по умолчанию". А что она считает таким - ХЗ.

По поводу проги, пробежался вскользь, сразу не понравилась запись DDRC = 0х00.
Это означает, что PORTC все время будет настроен как входной и работать на выход нормально не сможет.
Сейчас, если и работает, то только с помощью встроенных PullUp резисторов. Короче, надо записать DDRC = 0xFF.

На схеме, выходы порта подключать не напрямую к оптопаре и светодиоду, а через ограничивающие резисторы 100 Ом примерно, иначе можно спалить выходную логику порта(внутреннего ограничителя тока там нет).
PMEmail Poster
gccrim | Профиль
Дата 21 Декабря, 2008, 21:53




Group Icon

Группа: Silver Member
Сообщений: 850
Регистрация: 02.07.06
Авторитет: 3
Вне форума

Предупреждения:
(0%) -----




[Этот пост удален пользователем gccrim]
PMEmail Poster
Top
svip | Профиль
Дата 21 Декабря, 2008, 23:46
Quote Post




Group Icon

Группа: Gold Member
Сообщений: 1537
Регистрация: 30.11.06
Авторитет: 13
Вне форума

Предупреждения:
(0%) -----


Цитата
На схеме, выходы порта подключать не напрямую к оптопаре и светодиоду, а через ограничивающие резисторы 100 Ом примерно, иначе можно спалить выходную логику порта(внутреннего ограничителя тока там нет).
на самом деле стоит резистор 200 ом - один общий на все оптопары.

Цитата
И если каждый из них не указать явно, то прошьется то значение которое программатор(AVR студия) считает "по умолчанию".

что значит не указан явно? там только два варианта: стоит "птичка" или нет


____________________
Двое всегда договорятся, если хотя бы один из них не дурак.
PMEmail Poster
gccrim | Профиль
Дата 22 Декабря, 2008, 0:37
Quote Post




Group Icon

Группа: Silver Member
Сообщений: 850
Регистрация: 02.07.06
Авторитет: 3
Вне форума

Предупреждения:
(0%) -----


Ну значит надо посмотреть, соответствуют ли эти птички тому что требуется.
PMEmail Poster
svip | Профиль
Дата 22 Декабря, 2008, 1:44
Quote Post




Group Icon

Группа: Gold Member
Сообщений: 1537
Регистрация: 30.11.06
Авторитет: 13
Вне форума

Предупреждения:
(0%) -----


А может не в прошивке проблема??? а в самой схеме? по сути симисторы сами по себе не зыкрываются, их при отсутствии управляющего напряжения закрывает ток обратного полупериода. Возможно тут где то я не прав?


____________________
Двое всегда договорятся, если хотя бы один из них не дурак.
PMEmail Poster

Topic OptionsСтраницы: (2) 1 2  Start new topic Start Poll 

 



[ Script Execution time: 0.0137 ]   [ 13 queries used ]   [ GZIP включён ]






Политика конфиденциальности

Top