collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]


Focos LED SMD por almamater
[16 de Dezembro de 2023, 14:12]


I Belive por dropes
[15 de Dezembro de 2023, 13:59]


Carga de corrente eletrónica ZPB30A1 60W por jm_araujo
[11 de Dezembro de 2023, 13:27]

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

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

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
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.733
  • 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: 1.032
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.733
  • 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

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: bma180 avr
« Responder #4 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"-

Offline vasco

  • Mini Robot
  • *
  • Mensagens: 444
Re: bma180 avr
« Responder #5 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.
Stupid men are often capable of things the clever wouldn't dare to contemplate.