Например TDA7294

Форум РадиоКот • Просмотр темы - Помогите разобраться в CodeVisionсвязать at45db011 Atmega48P
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 19:25:52

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 2 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Помогите разобраться в CodeVisionсвязать at45db011 Atmega48P
СообщениеДобавлено: Сб май 28, 2011 15:52:19 
Родился

Зарегистрирован: Сб май 28, 2011 15:26:45
Сообщений: 2
Рейтинг сообщения: 0
Помогите пожалусто, задача состоит в том чтоб температуру и частоту записать во Fless at45db011, а потом всё это считать на комп. Теппература и Частота типа flot. Вы можите сказать что в интернете есть много описаний как это делать, но там всё написано под at45db161, у которой есть своя библиотека. Есть модель в Proteus и код CodeVision

#include <mega48p.h>
#include <1wire.h>
#include <alcd.h>
#include <ds18b20.h>
#include <stdlib.h>
#include <delay.h>
#include <stdio.h>
#include <spi.h>

long int count1 = 0; // счётчик для 1-го колебательного контура
long int count2 = 0; // счётчик для второго колебательного контура
float freq1 = 0; // частота колебаний на 1-ом конденсаторе
float freq2 = 0; // частота колебаний на 2-ом конденсаторе
int var = 0;
float N = 0; // количество снятых значений
char s1[6]; // переменные
char s2[6]; // для
char s3[6]; // вывода
char s4[6]; // на LCD
float temp=0; // температура

void LCD_Write(void) // функция по работе с термо-датчиком
{
ftoa(N,0,s4);
N = ++N;
freq1 = count1 ;
ftoa(freq1,0,s1);
freq2 = count2/100 ;
ftoa(freq2,0,s2);
temp=ds18b20_temperature(0);
ftoa(temp,1,s3);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(s1);
lcd_gotoxy(8,0);
lcd_puts(s2);
lcd_gotoxy(0,1);
lcd_putsf("N=");
lcd_puts(s4);
lcd_gotoxy(8,1);
lcd_putsf("T= ");
lcd_puts(s3);
OCR1AH=0x00; // OCR1AH=0xE1
OCR1AL=0xff; // OCR1AL=0xA3
var = 0;
count1 = 0;
count2 = 0;

}


// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
count1 = ++count1;
}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
count2 = ++count2;
}

// Timer1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
if (var<2) // заменить на 17
{
var=++var;
}
else
{
if (var == 2) // заменить на 17
{
OCR1AH=0x00; // OCR1AH=0xE1
OCR1AL=0xff; // OCR1AL=0xA3
var=++var;
}
else
{
#asm("cli")
LCD_Write();
#asm("sei")
}
}


}


void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=Out Func4=In Func3=Out Func2=Out Func1=In Func0=In
// State7=T State6=T State5=0 State4=T State3=0 State2=0 State1=T State0=T
PORTB=0x00;
DDRB=0x2C;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 11.719 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1B=0x0D;
OCR1AH=0x00; // OCR1AH=0xE1
OCR1AL=0xFF; // OCR1AL=0xA3
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Falling Edge
// Interrupt on any change on pins PCINT0-7: Off
// Interrupt on any change on pins PCINT8-14: Off
// Interrupt on any change on pins PCINT16-23: Off
EICRA=0x0A;
EIMSK=0x03;
EIFR=0x03;
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=0x02;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART0 Mode: Asynchronous
// USART Baud Rate: 4800
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x9B;
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 3000.000 kHz
// SPI Clock Phase: Cycle Start
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0x50;
SPSR=0x00;
// 1 Wire Bus initialization
// 1 Wire Data port: PORTD
// 1 Wire Data bit: 4
// Note: 1 Wire port settings must be specified in the
// Project|Configure|C Compiler|Libraries|1 Wire IDE menu.
w1_init();

// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 3
// D5 - PORTC Bit 4
// D6 - PORTC Bit 5
// D7 - PORTB Bit 0
// Characters/line: 16
lcd_init(16);

ds18b20_init(0,-55,125,DS18B20_12BIT_RES);
LCD_Write();

// Global enable interrupts
#asm("sei")

while (1)
{

}
}

есть ещё одна проблема частота 12МГц, предполагается что считываемые частоты будут около 500 кгц, но программа правильно работает только до 75кГЦ. То что частоты в протеусе отображают щас не те значения это не страшно так как предполагаеться что я буду потсчитывать частоту раз в 100с, а чтоб убыстрить моделирование я этот интервал сократил приблизительно до 1 с. Мне надо записывать эти данные вat45db011. А потом потоком передать их компьютеру. Помогите, это первый мой проект(


Вложения:
Комментарий к файлу: Моё устройство в Proteus и CodeVision
new.rar [115.15 KiB]
Скачиваний: 115
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться в CodeVisionсвязать at45db011 Atmeg
СообщениеДобавлено: Сб май 28, 2011 16:03:36 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 0
Не в тему, но первый проект попроще бы. А по теме - раз нет библиотеки, значит делайте по даташиту!

_________________
Docendo discimus


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y