I2C на Atiny13A

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 10
Зарегистрирован: Вс окт 11, 2009 13:40:38

Сообщение sp-fly »

Всем здравствуйте!
Ребят, подскажите где грабли. Не могу заставить ЦАП от Atiny13A работать. От Atmega8 без проблем, а с тинькой нефига.

Код:
/*
Chip type : ATiny13А
Program type : Application
AVR Core Clock frequency: 1,200000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : xxx
*****************************************************/

#include <tiny13a.h>
#include <delay.h>
#include <i2c.h>

#asm
.equ __i2c_port=0x18 //Адрес порта В
.equ __sda_bit=3
.equ __scl_bit=4
#endasm
#include <i2c.h>

unsigned int H_byte=0x8; //старший байт ЦАП
unsigned int L_byte=0x50;//младший байт ЦАП


void set_V()
{
// i2c программа******************************************************************
i2c_start(); //Кидаем команду "Cтарт" на шину I2C
i2c_write(0xC0); //Кидаем на шину адрес ЦАП
i2c_write(H_byte); // передача старшего байта данных
i2c_write(L_byte); // передача младшего байта данных
i2c_stop(); // стоп
}

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

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

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;
DIDR0=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// I2C Bus initialization
// I2C Port: PORTB
// I2C SDA bit: 3
// I2C SCL bit: 4
// Bit Rate: 100 kHz
// Note: I2C settings are specified in the
// Project|Configure|C Compiler|Libraries|I2C menu.

i2c_init();


}


void main(void)
{
initMC();
set_V();


while (1){}

}
Реклама
Потрогал лапой паяльник
Сообщения: 364
Зарегистрирован: Сб май 25, 2013 11:52:14

Сообщение Viper115 »

В тини 13 нет ЦАП, насколько мне известно
Реклама
Родился
Сообщения: 10
Зарегистрирован: Вс окт 11, 2009 13:40:38

Сообщение sp-fly »

ЦАП подключен к ней.
Потрогал лапой паяльник
Сообщения: 312
Зарегистрирован: Вс июл 29, 2012 16:25:39

Сообщение mas123 »

Осциллограф подтверждает правильность формирования диаграммы сигналов i2c и ASK-ответов от АЦП?
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Сообщение eess9 »

Вы привели много кода не относящегося к i2c. i2c естественно у вас программный, другого и быть там не может. А покажите содержание функций

Код: Выделить всё

i2c_start(); //Кидаем команду "Cтарт" на шину I2C 
i2c_write(0xC0); //Кидаем на шину адрес ЦАП
i2c_write(H_byte); // передача старшего байта данных 
i2c_write(L_byte); // передача младшего байта данных 
i2c_stop(); // стоп
Тогда можно будет помочь более конкретно.
Реклама
Родился
Сообщения: 10
Зарегистрирован: Вс окт 11, 2009 13:40:38

Сообщение sp-fly »

это в хидере i2c.h ятак понимаю.
Вот он:
/*
CodeVisionAVR V2.05.1+ C Compiler
(C) 1998-2011 Pavel Haiduc, HP InfoTech S.R.L.

Prototypes for I2C bus master functions

The I/O port and bits used for the SDA and
SCL signals and Bit Rate must be specified in the
Project|Configure|C Compiler|Libraries|I2C menu.
*/

#ifndef _I2C_INCLUDED_
#define _I2C_INCLUDED_

#pragma used+
void i2c_init(void);
unsigned char i2c_start(void);
void i2c_stop(void);
unsigned char i2c_read(unsigned char ack);
unsigned char i2c_write(unsigned char data);
#pragma used-

#endif
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Сообщение eess9 »

Больше интересно содержимое i2c.с. То, что вы скинули очень мало информативно.
Могу предложить проверенный код, но делался под AVR Studio.
Вложения
I2C.c
(2.66 КБ) 222 скачивания
I2C.h
(459 байт) 336 скачиваний
Родился
Сообщения: 10
Зарегистрирован: Вс окт 11, 2009 13:40:38

Сообщение sp-fly »

Больше интересно содержимое i2c.с.
Не пойму где он находится. ???

Я так подозреваю здесь с тактовыми частотами что-то не так. Ведь на Меге 8 этот же код работает:
/*
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega8.h>
#include <delay.h>
#include <i2c.h>

// I2C Bus functions
#asm
.equ __i2c_port=0x18 // адрес пора B
.equ __sda_bit=0
.equ __scl_bit=1
#endasm

unsigned int H_byte=0x8; //старший байт ЦАП
unsigned int L_byte=0x50;//младший байт ЦАП

void set_V()
{
// i2c программа******************************************************************
i2c_start();
//delay_ms(5); //Кидаем команду "Cтарт" на шину I2C
i2c_write(0xC0); //Кидаем на шину адрес ЦАП
//delay_ms(5);
i2c_write(H_byte); // передача старшего байта данных
//delay_ms(5);
i2c_write(L_byte); // передача младшего байта данных
//delay_ms(5);
i2c_stop();
}

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

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// I2C Bus initialization
i2c_init();

}

void main(void)
{
initMC();
set_V();

while (1){

}
}
Вымогатель припоя
Аватара пользователя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Сообщение eess9 »

Как я понимаю фьюзы у вас для ATTiny13 по умолчанию?
Эти строки генерирует сам CodeVisionAVR? Если они соответствуют действительности, то многое проясняется:
Chip type : ATiny13А
AVR Core Clock frequency: 1,200000 MHz

Chip type : ATmega8
AVR Core Clock frequency: 8,000000 MHz
Посмотрите дебагером что там у вас происходит. Код где-то зависает или читает все 0xFF? Каковы симптомы пациента?
Родился
Сообщения: 10
Зарегистрирован: Вс окт 11, 2009 13:40:38

Сообщение sp-fly »

Частоты тактирования соответствуют написанному. Но CV не генерирует об этом строк. Это я сам в комментариях вставляю.
По поводу дебагера, в CV нет его. Он AVR Studio просит. Буду устанавливать.
Вымогатель припоя
Аватара пользователя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Сообщение eess9 »

Если код работает для одного контроллера, то он рабочий :))
Единственное, что могу предположить, что вы неверно рассчитываете частоту шины для ATTiny13. Предполагаю, что это делает за вас компилятор, поэтому просто убедитесь, что в настройках проекта у вас стоит правильная частота 1.2МГц.
Родился
Сообщения: 10
Зарегистрирован: Вс окт 11, 2009 13:40:38

Сообщение sp-fly »

Да, дело в частоте. Попробовал запустить мегу8 на 1Мгц и все. цап не запустился. Вернулся на 8Мгц, и все заработало.
Теперь вопрос, где эту частоту скорректировать.
Вымогатель припоя
Аватара пользователя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Сообщение eess9 »

хотя я и не знаю CodeVisionAVR, но первая же ссылка в google дает ответ :))
Вложения
configure_project.jpg
(60.7 КБ) 517 скачиваний
Родился
Сообщения: 10
Зарегистрирован: Вс окт 11, 2009 13:40:38

Сообщение sp-fly »

Слава Богу, и Вам огромное спасибо за диалог и помощь!!! Все заработало.
Точно, забыл совсем про configure_project. Все время Меги пользовал, так и конфигурация компиллера была одинаковая, а тут другой камень и все, затык.
Ответить

Вернуться в «AVR»