collapse

* Posts Recentes

Recuperação de um AGC por SerraCabo
[18 de Janeiro de 2019, 19:49]


Proteção Lipo por Kristey
[17 de Janeiro de 2019, 13:24]


Mais uma reparação - frigorífico Fagor por SerraCabo
[16 de Janeiro de 2019, 18:46]


Rolamentos por almamater
[13 de Janeiro de 2019, 22:26]


Artigo 11, 13 e os restantes por brunus
[13 de Janeiro de 2019, 20:26]


Corte de metal - Evolution Rage 2 por SerraCabo
[12 de Janeiro de 2019, 12:36]


Procuro serviço de impressão 3D por brunus
[10 de Janeiro de 2019, 13:41]


Compra partilhada no site da Elektor [voucher 10€ até 2 Janeiro] por brunus
[09 de Janeiro de 2019, 17:37]


Video Porteiro do Prédio por Alfredo Garcia
[06 de Janeiro de 2019, 23:27]


Alicate para crimpar? por Njay
[02 de Janeiro de 2019, 02:02]

Autor Tópico: bma180 avr  (Lida 808 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.590
  • 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.590
  • 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