collapse

* Posts Recentes

Como transformar um mosquito killer de tomada em um portátil? por jm_araujo
[Hoje às 13:35]


Carregador para 18650 por brunus
[Ontem às 23:16]


cabo utp cravar por brunus
[Ontem às 23:15]


Keysight UXR 110GHz BW, 256GS/s, 10-bit Real-Time Oscilloscope por SerraCabo
[Ontem às 20:26]


leitura de voltagens com o analogRead(A0) por jm_araujo
[16 de Setembro de 2018, 18:36]


BostonDynamics - Vai uma mãozinha? por josecarlos
[16 de Setembro de 2018, 11:26]


Comunidades Online de Drones por MAntunes
[09 de Setembro de 2018, 18:00]


Sorte do catano por Njay
[09 de Setembro de 2018, 16:51]


BUILD: Toolmaker's Clamp Thingy por TigPT
[08 de Setembro de 2018, 20:19]


Telescopio por Njay
[08 de Setembro de 2018, 15:27]

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

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

Online dio123

  • Mini Robot
  • *
  • Mensagens: 943
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.548
  • 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

Online dio123

  • Mini Robot
  • *
  • Mensagens: 943
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.548
  • 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