LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: dio123 em 18 de Agosto de 2018, 17:15

Título: bma180 avr
Enviado por: dio123 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.   
Título: Re: bma180 avr
Enviado por: senso em 18 de Agosto de 2018, 18:38
Que biblioteca é que estás a usar?

A do pete fleury trabalha perfeitamente..
Título: Re: bma180 avr
Enviado por: dio123 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{
}
}
Título: Re: bma180 avr
Enviado por: senso 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).
Título: Re: bma180 avr
Enviado por: dio123 em 03 de Fevereiro de 2019, 21:24
Boa noite,
Estava a fazer mais uns avanços, e quando ia a testar surgiu aqui um problema no qual corri o tio Google mas o gajo nao deve ter percebido o que queria,  ou o mais provável eu nao saber procurar, exprimentei ainda uma quantas coisas que apareceram mas nao deu em nada.

Preciso de imprimir um array por uart mas não estou a consegui fazer.

Então eu tenho o seguinte:
char rawADC[6]={2,4,6,8,1,3};
uart_puts(rawADC); // aqui supostamente devia aparecer no terminal os valores 2,4,6,8,1,3 e não está a sair nada
char msg[]= "teste";
uart_puts(msg); // aqui aparece no terminal "teste"-
Título: Re: bma180 avr
Enviado por: vasco em 03 de Fevereiro de 2019, 21:40
Não, não, não...

Ao tentares fazer o print de um array numérico dessa maneira estas a tentar fazer o print do caracter ASCII com o valor de cada elemento do array. Como isso são tudo valores abaixo de 32 não aparece nada.
Se meteres lá valores acima de 65 acho que compreendes melhor o que estou a dizer.

Para converteres valores numéricos para uma string ascii, tens que recorrer a funções do estilo itoa() ou sprintf(), não sei o que está disponível no AVR strudio, no arduino IDE o Serial.print resolver a maior parte das situações, as coisas só se complicam quando são valores não inteiros.