collapse

* Posts Recentes

Placa BMS Desliga por almamater
[Ontem às 09:06]


Vende-se MUITO e BOM material por m90mine
[13 de Novembro de 2018, 23:32]


LusoRobótica - Website - Estado actual por TigPT
[11 de Novembro de 2018, 16:08]


Circuito para distinguir fase do neutro por TigPT
[10 de Novembro de 2018, 15:50]


leitura de voltagens com o analogRead(A0) por vasco
[08 de Novembro de 2018, 13:59]


Controlar Velocidade Motor AC por senso
[06 de Novembro de 2018, 23:05]


Placa misteriosa por edeweld
[04 de Novembro de 2018, 16:41]


Gearbox por josecarlos
[04 de Novembro de 2018, 11:36]


Referencias de standards tubagens industriais por KammutierSpule
[29 de Outubro de 2018, 23:23]


Maneira correta de ler o ADC do Arduino ? por Njay
[28 de Outubro de 2018, 01:44]

Autor Tópico: bma180 avr  (Lida 731 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 944
bma180 avr
« em: 18 de Agosto de 2018, 17:15 »
Ora bem mandei vir um sensor 3 eixos bma180 e ainda sem projecto  em vista, lá meti numa breadboard com logic level converter e um lcd 16x2.
Google saquei codigo do arduino na net mudei so para aparecer os valores x,y,z no lcd . Tudo a funcionar perfeitamnte. hardware ok.

Agora vou começar a desenvolver código no avr studio, e como nunca fiz lib I2c/twi que é protocolo que vou usar , fui a net sacar e testar.
Mas como nao aparecia valores no lcd , simulei no isis  proteus com o osciloscopio no pino SDA aparece o 8 bits com o codigo do arduino,  mas nas libs que sacei sai-me 29 bits seguidos.

Olhei para o codigo wire do arduino que vai para twi, reparei que usa interrupts ISR em relação as que sacei, será que influencia na comunicação.   

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.577
  • Helpdesk do sitio
Re: bma180 avr
« Responder #1 em: 18 de Agosto de 2018, 18:38 »
Que biblioteca é que estás a usar?

A do pete fleury trabalha perfeitamente..
Avr fanboy

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 944
Re: bma180 avr
« Responder #2 em: 18 de Agosto de 2018, 23:02 »
A primeira que usei foi pete fleury mas como nao aparecia valores do bma180 e ao ver o codigo vi que estava em assembly, saltei para outra lib e exprimentei mais 2 ou 3 da net e todas não apareciam valor.
Achei estranho, meti o codigo do arduino e deu logo. Ok então lembrei-me ver a saida SDA  no proteus mas não é igual pois arduino, sai um bloco 9bits e avr studio sai 29 bits
Penso que seja por isso que nao consigo ver valores no lcd.

Em anexo os print do osciloscopio.

No codigo apenas tenho isto mñ~~
Código: [Seleccione]
#define F_CPU 16000000UL
#include <util/delay.h>
#include "i2cmaster.h"

#define BAUDRATE 9600
#define BAUD_PRESCALLER (((F_CPU / (BAUDRATE * 16UL))) - 1)

int main(void){
i2c_init();
_delay_ms(100);
i2c_start(0x40);   //start transmission to ACC
i2c_write(0x10);               //send register address
i2c_write(0xB6);                   //send value to write
i2c_stop();           //end trnsmisson

while(1){ //Loop infinito{
}
}
« Última modificação: 18 de Agosto de 2018, 23:10 por dio123 »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.577
  • Helpdesk do sitio
Re: bma180 avr
« Responder #3 em: 19 de Agosto de 2018, 01:21 »
Tens de fazer um left shift( << ) no endereço para funcionar com a biblioteca do Pete..

E isto ajuda quando há duvidas com o i2c:

Código: [Seleccione]
void i2cScanner(void){

uartPutsP("\n[Starting I2C scan]\n");

uint8_t retVal;

for(int i=0; i<120; i++){

retVal = i2c_start(i<<1);
_delay_ms(1);
i2c_stop();
_delay_ms(10);

if(retVal == 0){
sprintf(buff, ">Found: %x\r", i);
uartPuts(buff);
}
}

uartPutsP("[I2C Scan Complete!]\n");
}

Os delays penso que podes remover, é código que não toco á meses, penso que estão ai devido a um atrofio eletrico no bus(50cm e i2c com pull-ups de 47k não casa bem).
« Última modificação: 19 de Agosto de 2018, 01:42 por senso »
Avr fanboy