|
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2024 11 05, 06:25. Visos datos yra GMT + 2 valandos.
|
|
|
|
Forumas » Mikrovaldikliai » Atmega8 ir slave i2c adresas
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
|
|
|
Atmega8 ir slave i2c adresas |
Parašytas: 2016 02 10, 15:01 |
|
|
|
sveiki, niekaip nesudraugauju atmega8 ir SI570 mikroschemos (i2c protokolas), programavimui naudoju WinAVR ir Procyon Avrlib bibliotekas. SI570 adresas 0x55 (bin formatu 01010101), SCL ir SDA pajungti į pliusą per 8,7k varžas.
Kiek internete išskaičiau, i2c protokole adresui naudojami 7 bitai (be pirmo nulio,t.y. bin formatu 1010101) ir pridedamas LSB 8 bitas Read/Write.
i2c.c faile:
Kodas: |
void i2cMasterSend(u08 deviceAddr, u08 length, u08* data)
{
u08 i;
// wait for interface to be ready
while(I2cState);
// set state
I2cState = I2C_MASTER_TX;
// save data
I2cDeviceAddrRW = (deviceAddr & 0xFE); // RW cleared: write operation
for(i=0; i<length; i++)
I2cSendData[i] = *data++;
I2cSendDataIndex = 0;
I2cSendDataLength = length;
// send start condition
i2cSendStart();
}
|
yra eilutė I2cDeviceAddrRW = (deviceAddr & 0xFE); // RW cleared: write operation , kur įstačius vietoje skliaustų (01010101 & 11111110) gaunamas I2cDeviceAddrRW = 01010100, nors turėtų būti prieš AND operaciją paslinkimas i2c adreso reikšmės per vieną poziciją ir atitinkamai I2cDeviceAddrRW = 10101010.
Atitinkamai su osciloskopu tikrinant SDA matau išeinantį iš atmegos 01010100 (arba 0x2A ir "0" RW bitas), SI570 neatsiliepia (Not Acknowledge) ir nutruksta duomenų perdavimas (STOP impulsas)
Visas kodas c kalboje (kol kas nieko gero jis nedaro):
Kodas: |
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "i2c.h"
#define LOCAL_ADDR 0xA1
#define TARGET_ADDR 0x55 //defines target I2C address
// local data buffer
unsigned char localBuffer[] = "FA"; //F hex = 15 (bin 1111, A hex = 10 (bin 1010)
unsigned char localBufferLength = 0x02;
int main(void)
{
i2cInit();
i2cSetLocalDeviceAddr(LOCAL_ADDR, TRUE);
while(1)
{
i2cMasterSend(TARGET_ADDR, localBufferLength, localBuffer);
_delay_ms(1000);
}
}
|
|
|
|
|
|
|
|
Re: Atmega8 ir slave i2c adresas |
Parašytas: 2016 02 10, 16:06 |
|
|
|
Ffa rašo: |
SI570 adresas 0x55 (bin formatu 01010101) |
Bet veliau rasai:
Ffa rašo: |
Kiek internete išskaičiau, i2c protokole adresui naudojami 7 bitai |
Kaip ir nesueina, sutinki?
EDIT:
AlgisL rašo: |
Tai daryk taip:
#define TARGET_ADDR (0x55 << 1) |
A jau viska pasakei... Neidomu |
|
|
|
|
|
Atmega8 ir slave i2c adresas |
Parašytas: 2016 02 10, 18:36 |
|
|
|
žinau kaip pastumti bitus, tiesiog nepatikėjau akimis. Dabar pabandžiau ir SI570 atsiliepė ACK.
Galvojau Pascalio libsai daugumos naudojami, o čia toks nesusipratimas |
|
|
|
|
|
|
Google paieška forume |
|
|
Naujos temos forume |
|
|
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
|
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
|
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
|
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
|
LEGO
Mänguköök,
mudelautod,
nukuvanker |
|
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope |
|
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
|
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
|
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
|
GTA 6 Weapons
GTA 6 Characters,
GTA 6 Map,
GTA 6 Vehicles |
|
FS25 Mods
Farming Simulator 25 Mods |
|
|
|