Ir ao conteúdo
  • Cadastre-se

Iniciando com os Microcontroladores (Ajuda para escolher um modelo)


Posts recomendados

@aphawk,
Eu pensei o mesmo que você

Utilizei uma sintaxe simples para resolver esse problema. Como o programa executa diversas linhas de código por segundo.

Se eu pressionar um botão por 1 segundo ele já teria lido várias vezes e assim incrementar a variável do contador também...

 

Pensei no seguinte:

Voltar1:      If Sensor1 = 0 Then          Goto Voltar1       End If

Isso faz com que o sistema fique preso em uma rotina até que o botão não seja mais pressionado. 

@_xyko_,
Eu gostei bastante das funções incr/decr. Ainda não conhecia ^^

Mas ainda não ficou claro na minha mente o comando config portb = &b00001111

Vê se estou certo... Ele basicamente diz se um pino é do tipo input ou output. 

Input tem valor 0 e Output 1. É isso mesmo?

 

Sobre o tópico, eu não sabia que quando ponho como resolvido ninguém mais poderia comentar kkkkk

Melhor deixar em aberto então ^^ Pode ser que tenha gente com a mesma dúvida futuramente e nem 

precisarão criar novos tópicos sobre o mesmo assunto.

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Deixei aberto ainda pra tirarmos uma dúvida com a Isadora.

Isso mesmo,

0=entrada

1=saída

 

e DDRB é o registrador de controle de entrada/saída do PortB,

Assim como DDRC, DDRD e demais para outros uCs.

Já economiza algumas teclas do seu teclado... :o

Aí nem é uma instrução nativa do Basic. Está colocando um valor diretamente em um registro no Hardware.

 

If Sensor1 = 0 Then

Goto Voltar1

End If

 

Só tem uma instrução caso a condição seja verdadeira ou falsa, pode fazer direto, sem endif..

If Sensor1 = 0 Then Goto Voltar1
 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Bom... eu vivo disso.

Existe um vasto campo de trabalho pra quem programa microcontroladores.

Eu sou autônomo e já tenho meus clientes fixos na área de iluminação profissional e de vez em quando aparece um projetinho esquisito, tipo algo que não tem no mercado, ou seja, dedicado. Mas na área de segurança, automação, entretenimento,... tá difícil achar uma área que não use microcontroladores... :goff:

 

Ressalto que só programar não basta. Tem que ter um ótimo conhecimento de eletrônica, principalmente digital.

Projeto eletrônico microcontrolado não funciona sem o circuito e vice-versa..

Link para o comentário
Compartilhar em outros sites

@densyy,

Quanto ao que você postou, sobre modificar o programa, não reaolve nada. pesquise sobre o ruído mecânico.... Ele fica oscilando rapidamente entre 1 e 0 antes de estabilizar no valor.

Mas se voce colocar antes do Goto Voltar1 , a instrução : Waitms 30

Aí sim deve resolver o ruído.

Paulo

Link para o comentário
Compartilhar em outros sites

Entendi!

Fiz algumas mudanças no código: http://pastebin.com/FuK3BtNz

 

Adicionei os comandos incr/decr para limpar um pouco o código

E o waitms 30 para evitar os problemas de ruído.

 

@_xyko_, @aphawk, @Isadora Ferraz

Mas surgiu uma dúvida.

No código existem 2 variáveis chamadas: Quantidade_carros_entrada/Quantidade_carros_saida

Elas armazenam um valor do tipo inteiro... E se eu quisesse printar esse valor em algum componente?

Qual componente seria? E como eu faria o componente receber esse valor? 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

resolve tudo e na moleza - soft. No entanto creio que caberia aqui mais 1 conceito um pouco mais duro  - hard - que pode não lhe ser totalmente inúil: entrada smicth trigger e capacitor. Os 3 conceitos juntos sw+2hw resolvem de vez o problema de repique - ruído mecânico -  da tecla. Em algum momento você vai ter que meter a mão na massa mesmo... Portanto para teclas... capacitor e entrada st: um caso sério e sem perda de tempo wait's e delays

 

Num momento futuro próximo, você vai notar que ler teclado por interrupção ou aproveitando alguma é uma opção bem legal. Mas calma...1 passo por vez...

 

chicão a qualquer momento faremos um benchmarkzinho ok?

 

edit duplicado

 

Paulão. só você programa mc em basic aqui? se sim... agora agüenta kk. Veja de outra forma: milhares deste forum programam mas só você tem boa vontade. Receba um virtual aperto de mão. você é o 'escolhido' kk

 

abç

Link para o comentário
Compartilhar em outros sites

@Isadora Ferraz,

 

 Olha, são poucos os que usam o Bascom aqui.

 

Primeiro, tudo que é escola insiste em falar que tem de aprender a usar PIC porque é o que o mundo usa. Baita bobagem !!!!

 

Segundo, até aqui mesmo falam que o C é muito superior a todas as linguagens !!!! Outro erro enorme .....

 

Então, defender o uso do Bascom e os AVR's aqui é querer tomar porrada de todo lado, e muitas vezes até de "fogo amigo" !!!!

 

Mas eu, como engenheiro eletrônico, sempre procurei otimizar meu trabalho. Se um AVR tem hardware superior a um Pic, custa menos, tem mais performance, eu sou "obrigado" a usá-lo !

 

E se tenho a opção de usar um Basic feito especialmente para a linha AVR, que tem comando fantásticos para preparar o hardware interno deles, claro que vou usar !!!

 

 

Aqui, faço uma pausa :

 

O mérito todo de divulgar o Bascom e os AVR's foi do @_xyko_ !!!!

 

 

Ele que me apresentou ao programa, quando eu insistia em usar os Pics !

 

Logo, eu ví a superioridade da plataforma, e vendo o que o Bascom podia fazer, me convencí na hora de que este era o caminho !

 

Desde então, só uso os AVR's e o Bascom.

 

Ganhei bastante dinheiro vendendo soluções com eles, algumas eram tão simples que eu até me envergonhava em cobrar o que cobrei kkkkkk !

 

Ainda vejo que existe muita resistência aqui no Fórum em usar essa plataforma, e penso que se mesmo o Arduíno tem poucos usuários aqui, imagine o Bascom ......  

 

Hehehe olha , Isadora, nem Cristo conseguiu fazer o mundo mudar, então eu me conformo com isso !

 

Afinal, sou um simples engenheiro, contra trocentos professores de escolas aqui no Brasil, que se acham o máximo .... muitos tem nome a zelar, tem cargos nas faculdades, e não vão querer se atualizar e ensinar o correto !!! Estão velhos, e isso iria tirar a segurança no tema que eles possuem hoje !

 

Mas a minha visão é muito clara, ainda mais depois de saber que mais de 70% dos usuários do Fórum do Bascom na Europa são engenheiros :

 

Prá que complicar, ficar usando uma linguagem que não segue nenhum padrão como o C ( claro que vão falar que existe o ANSI C, mas nenhum compilador de sucesso segue a ANSI.... ) , se eu posso utilizar uma linguagem muito mais fácil, tão poderosa quanto, e de fácil compreensão quando lida ??????

 

E mais, desde 2004 existe total compatibilidade no Bascom, sendo muito raro um programa compilar numa versão antiga e não compilar numa nova !!!!

 

Eu cansei de ler programas em C que de tanto usarem simplificações na escrita eu desistí antes de entender o que que realmente fazia.... isso nao pode ser feito para facilitar o aprendizado, afinal aqui somos um Fórum de ensino, certo ?

 

 

Agora, sobre o benchmark... creio que voce vai se surpreender.....

 

Enfim, isso é a minha visão sobre esse assunto.

 

 

 


@densyy,

 

voce pode "Printar" isso em uma interface serial, ou em um display !!!

 

Se voce inicializar uma interface serial, pode se comunicar com um PC, ou outro tipo de hardware.

 

Claro que também pode se comunicar com uma interface USB, mas é tão complicado que eu acho muito mais fácil usar um conversor serial-USB, existem alguns no Ebay que custam menos de US$ 3 .....

 

Eu tenho aqui em casa uns 6 desses, de dois tipos diferentes. Nunca se sabe ..... !

 

E claro que você pode mandar isso em um display caractere  tipo LCD comum, ou gráfico, ou OLED !

 

Olha no meu tutorial, vou te dar uma sugestão :

 

ANTES DE MAIS NADA, LEIA TODO O TUTORIAL !!!!!!

 

Assim, você já vai saber o que que pode ser feito, e até como fazer, e vai evitar ficar fazendo perguntas que já foram respondidas no tutorial !

 

Não pense que é perda de tempo. É GANHO de tempo !!!!  Leia tudo, e voce vai perceber o que que pode ser feito !

 

Ah, e o seu novo código ainda não está bom quanto a ruídos.....

 

Sugiro que use o DEBOUNCE, vai se surprender com a facilidade !

 

Paulo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Por exemplo:

Dica: Quando quiser quebrar uma linha muito comprida, coloque um underline [_] onde quer quebrar e continue na linha seguinte, como na linha "Config Com1 ..."

'RX-TX by xyko'------------------------------------------------$regfile = "m328pdef.dat"$crystal = 16000000$baud = 19200Config Com1 = Dummy , Synchrone = 0 , Parity = None , _Stopbits = 2 , Databits = 8 , Clockpol = 0Dim Tecla_recebida As Byte                                                      'estou usando byte porque é                                                                                'apenas para retornarEspera:'Do  Do : Loop Until Ucsr0a.rxc0 = 1                                               'espera um caractere na COM1  Tecla_recebida = Udr0                                                         'pega o dado referente a tecla  Print "O caractere recebido foi [ " ; Tecla_recebida ; " ]" 'loopGoto EsperaEnd
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

"Ele que me apresentou ao programa, quando eu insistia em usar os Pics !"
Amigo acho que estamos confundindo algo. você disse que prefere bascom ao pic? Quando o certo seria avr ao pic e basic ao c. é isso? Também concordo que o avr é superior ao pic além de mais barato. Com relação à linguagem, se não fosse o C nem basic, nem bascom existiriam. Seria basi e basom kk. De fato esta discussão não nos levaria a lugar nenhum ok?

Bom fiz isso no keyl prum atmega16 só pra teste.

//cristal 3.6864MHz#define F_CPU 3686400#define BAUD 2400                                  // define baud#define BAUDRATE ((F_CPU)/(BAUD*16UL)-1)            // set baud rate value for UBRR #include <ioavr.h>/* UART Control and Status Register A */#define    RXC      7#define    TXC      6#define    UDRE     5#define    FE       4#define    DOR      3#define    PE       2#define    U2X      1#define    MPCM     0 /* UART Control and Status Register B */#define    RXCIE    7#define    TXCIE    6#define    UDRIE    5#define    RXEN     4#define    TXEN     3#define    UCSZ2    2#define    RXB8     1#define    TXB8     0//************macros pra escrita de constantes em forma de bits caso o compilador não tenha*********/#define B8__(x) ((x&0x0000000fLU)?1:0) \+((x&0x000000f0LU)?2:0) \+((x&0x00000f00LU)?4:0) \+((x&0x0000f000LU)?8:0) \+((x&0x000f0000LU)?16:0) \+((x&0x00f00000LU)?32:0) \+((x&0x0f000000LU)?64:0) \+((x&0xf0000000LU)?128:0)#define HEX__(n) 0x##n##LU#define b8(d) ((unsigned char)B8__(HEX__(d)))/* for upto 16-bit binary constants, MSB first */#define b16(dmsb,dlsb) (((unsigned short)b8(dmsb)<< \+ b8(dlsb))/* for upto 32-bit binary constants, MSB first */#define b32(dmsb,db2,db3,dlsb) (((unsigned long)b8(dmsb)<<24) \+ ((unsigned long)b8(db2)<<16) \+ ((unsigned long)b8(db3)<< \+ b8(dlsb))//unsigned char USART_Receive( void )//{///* Wait for data to be received *///while ( !(UCSRA & (1<<RXC)) && kb3 );///* Get and return received data from buffer *///return UDR;//}void USART_Transmit( unsigned char data ){/* Wait for empty transmit buffer */while ( !( UCSRA & (1<<UDRE))) ;/* Copy 9th bit to TXB8 */UCSRB &= ~(1<<TXB8);//if ( data & 0x0100 )//UCSRB |= (1<<TXB8);/* Put data into buffer, sends the data */UDR = data;}void uart_init (void){    UBRRH = (BAUDRATE>>8);                      // shift the register right by 8 bits    UBRRL = BAUDRATE;                           // set baud rate    UCSRA=0x20;    UCSRB|= (1<<TXEN)|(1<<RXEN);                // enable receiver and transmitter//    UCSRC = b8(10000110);    UCSRC=b8(10001110);//acesso, assincrono, sem paridade, 2 stop bits, 8 bits, polaridade fall    //UCSRC|= (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);   // 8bit data format}void printf(const char *s){while(*s) USART_Transmit(*s++);}struct fl4        //estrutura do float em 4 bytes{unsigned char flb0;unsigned char flb1;unsigned char flb2;unsigned char flb3;};union  {struct fl4 byte_float;  //4 bytes contidos em...float _float;      //32 bits} cf; //char mesclado com float#define pi cf._float      //pi no float#define f0 cf.byte_float.flb0    //byte 0 de pi#define f1 cf.byte_float.flb1    //byte 1#define f2 cf.byte_float.flb2    //byte 2#define f3 cf.byte_float.flb3    //byte 3void main(void){float i;uart_init();printf("Computando valor de pi...");for(i=1; i<=2700; i+=2){pi += 4/i;i += 2;pi -= 4/i;}printf("4 bytes asc-ii do pi:");USART_Transmit(f0+'0');USART_Transmit(f1+'0');USART_Transmit(f2+'0');USART_Transmit(f3+'0');for(;;}



o .hex


:100000000C94B6001895189518951895189518958C
:100010001895189518951895189518951895189578
:100020001895189518951895189518951895189568
:100030001895189518951895189518951895189558
:100040001895189518951895189518951895189548
:10005000189518955D9BFECF50980CB9089500E057
:1000600000BD0FE509B900E20BB90AB108610AB990
:100070000EE800BD0895BA93AA93D80103C00C916D
:10008000E9DF11960C910023D1F7A991B991089558
:100090000E944002E4DF00EA10E0EDDF80E090E043
:1000A000A0E8BFE342C0AC01BD0100E010E020E8E1
:1000B00030E40E94AE01E0EDF0E0408151816281C8
:1000C00073810E943F01E0EDF0E000831183228301
:1000D000338340E050E060E070E48C019D010E94B9
:1000E0003F01C801D901AC01BD0100E010E020E8EA
:1000F00030E40E94AE01A801B901E0EDF0E000811A
:100100001181228133810E948301E0EDF0E00083C0
:1001100011832283338340E050E060E070E48C017F
:100120009D010E943F01C801D90141E050EC68E205
:1001300075E48C019D010E94280208F4B4CF0AEBFB
:1001400010E099DF0091D000005D84DF0091D100C4
:10015000005D80DF0091D200005D7CDF0091D30064
:10016000005D78DFFFCF00008895FECF0FE90DBF5F
:1001700000E00EBFC0E8D0E00E944502002311F06D
:100180000E9455020E9448000E94B3000C94B300E4
:10019000FF27112477FB660F771F089409F4771F58
:1001A000679517F8EE27002437FB220F331F0894BA
:1001B00009F4331F279507F8089527FD0EC0EE0FA9
:1001C000001F111F221F3A953230B8F7332319F45C
:1001D00027FD31E002C027FF30E0E03821F400FFC6
:1001E00008940EF488940F4F1F4F2F4F3F4F32301B
:1001F00038F4332319F427FD31E002C027FF30E043
:100200003F3F29F0220F000C37952795089584C0B1
:10021000F901EE0FFF1F37FBFF3F31F0EF2BE12B12
:10022000E02B8894B8940895E02BE12B21F00894FA
:100230009894B89408959894889438940895FB01FC
:10024000EE0FFF1F77FBFF3F31F0EF2BE52BE42B89
:100250008894B8940895E42BE52B69F3E8CFEFDF99
:1002600068F021F43723262F8A010895372FFBCF1A
:10027000E6DF20F00BF008957327EAF751C0C8DFDE
:10028000E8F3B3F361F3DBDFC8F383F3A1F380DFBB
:10029000401751076207730731F4011411F100246C
:1002A000E89488942BC078F0332E372F732D322E9C
:1002B000262F632D312E152F532D302E042F432D35
:1002C000302C012C132C371739F06695579547952C
:1002D000F795E0407395F7CFE7FBEE0FE0E01024D1
:1002E0006AF0EF0F041F151F261F60F4279517955E
:1002F0000795E79508F46894339566CFEF0B040BE8
:10030000150B260B61CFE0E87E27B9CF302D307872
:1003100022271127002708953FE7302920E8F9CF49
:100320003FEF2FEFF6CF8BDFD8F3D1F3707837277D
:10033000089585DFA8F3A3F3F9CF3078372793CF5B
:100340007EDF10F00BF0F2CFEBCF79DFE9F3E0F3D3
:10035000032E0726DBCF032E0726DECF59DFA0F3BF
:100360007BF399F36CDF80F39BF3A9F311DF012496
:1003700027FD06C0000F111F221F3150E040F8CFAB
:1003800067FD06C0440F551F661F7150F040F8CF3F
:10039000E894371BEF0B3158EF4F2AF0EE23E9F6C4
:1003A0003F3FD9F203C03A3EA8F26894E0E0F0E0A3
:1003B0001124139440175107620738F0315008F4A4
:1003C0006894000F111F221FEE1F041B150B260B34
:1003D000EF0B000F111F221FEE1F0A9279E17A9591
:1003E000AAF0041715072607EF0730F0041B150BBA
:1003F000260BEF0B089401C08894111C221C331C9F
:10040000001C000F111F221FEE1FE9CFF0F9E89426
:10041000E22BE12BE02B09F06894069437942794A3
:100420001794E79508F468947395B9F3099033230A
:1004300011F0F0FF09C0369427941794E79508F45B
:10044000689433953130BCF3012D122D232DC5CE88
:10045000F6DEA0F0DDDE90F029F0E32FE7273AF496
:1004600073170895ECDE51F04EF0089408950417C8
:1004700015072607370719F016F4B8F7889408957A
:10048000BA93AA939A938A93089501E0089520E07D
:1004900006D0E9F70895259102D0E9F708952D9344
:1004A00001501040202F212B08958EED94E0FC0187
:1004B00005911491FC013296A591B491FC013496FA
:1004C00025913491422F432B19F0F901E4DF01C04B
:1004D000DEDF069614E08A3E910748F30895300067
:1004E000A000EA040400D0000000436F6D70757432
:1004F000616E646F2076616C6F7220646520706934
:100500002E2E2E0034206279746573206173632D62
:0A051000696920646F2070693A00E9
:00000001FF
:00000001FF



Não se assuste com as macros. O keyl não permite usar o tradicional 0b10101010 por isso a macro b8(10101010)
A proposta é simples
-não usar libs prontas (note o printf minimalista)
-calcular o valor de pi e armazenar num float 32 bits
-enviar os 4 bytes do float para a serial no formato asc-ii.
Juro que não foi de propósito. Sei que em basic há dificuldade com armazenar duas variáveis no mesmo espaço de ram (union). Mas alegre-se: pelo menos não usei ponteiros ou vetores kk
Está comentado mas caso queira saber fiz uma estrutura (struct) que faz a união (union) de duas variáveis. (char f3...0 ocupam os 4 bytes de float pi)
Mas a ideia é ver quantos bytes de flash o mesmo programa ocuparia se compilado em basic. Float envenena mc de 8 bits. Ficou grandinho por causa dele. Se ficar menor em basic, vou cogitá-lo no futuro why not?. Mas não sou tão fácil assim...Existe compilador basic para outros mc´s? Tenho contado com avr´s, 51´s, arm´s, pic´s e alguns etc. É que não posso me casar com avr pois tenho de ser 'fiel a todos'. kk

Os 4 bytes de pi vi no avr com proteus mesmo. são AE 03 49 40. Infelizmente meu avr studio está com problema e não pude ver nele o valor da variável pi. Pra esta façanha tive que usar o mesmo fonte num pic16f628 pra ver o pi meiabocamente 3.14154053.

 

Bom é isso. Se achar que agrega valor, tiver tempo, recurso, saco e etc, tente no basic pra gente ver.

Me fez lembrar.Certa feita enviei os bytes diretamente pro excel via VB e remontei o valor pi a partir dos 4 bytes. De fato já fiz algo assim usando o VB, Delphi e Borland C++. Acessei a serial com a inpout.dll. Enviava um valor ad de um potenciômetro. Quase tive um treco quando rodava o pot e via a variação na tela! kk

abç

 

post-528815-0-06403400-1434392756_thumb.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@Isadora Ferraz

"não usar libs prontas (note o printf minimalista)
-calcular o valor de pi e armazenar num float 32 bits
-enviar os 4 bytes do float para a serial no formato asc-ii.
"!

 

Só isto mesmo?

 

Mais tarde ou a noite  eu faço.

No momento estou com um abacaxi bem maior pra descascar.

 

Obs: Por quê separou o asc do ii

Link para o comentário
Compartilhar em outros sites

O que eu senti falta no Bascom é a falta de informação.
Por exemplo: Não sei nem os comandos que posso utilizar...
N existe algum site que defina todos os comandos e exemplos

simples de como utilizá-los? As bibliotecas que existem e a utilização

delas? Se fosse em Português seria melhor ainda ^^

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@_xyko_

é isso amigo. Provavelmente existe algo melhor para benchmark. Mas penso que o uso de ponto flutuante faça o mc suar a camisa. Por isso esta ideotazinha. Se tiveres algo melhor, não te acanhes em propor. Quanto ao asc-ii... seilá... escrevo como falo. Senão tinha que falar 'assií'. Boa sorte com o abacaxi. Ei... que tal um suco?! Se bem que prefiro com cachaça...

 

Amigo @densyy

Acho que você precisa de um pouco + de ajuda (nada pessoal hein!)  e  deve dar uma lida nos artigos (que não li) propostos pelos gurus. De fato não conheço o bascom e não sei se ele é movido a comandos (arduíno like) ou funções básicas do basic. Eu particularmente preferiria o básico mesmo. Penso assim: se conhecer um pouco dos circuitos lógicos do mc (vulgo datasheet), aprender como acessar/manipular cada periférico - aí sim depende de peculiaridades do bascom - , o resto é basic puro. O mesmo para quaquer linguagem (exceto assemby) Este resumo está correto queridos chicão&paulão?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Puxa! @densyy É só apertar F1 que terá um curso completo.

Ou http://avrhelp.mcselec.com/

 

@Isadora Ferraz.

As 81 linhas com 16 bytes cada  do seu código HEX deu 1296bytes.

 

Não sei o que quis dizer com imprimir em ascii. Eu imprimi como string, que é o ASCII já representado como caracteres.

 

O report do bascom , fonte e endereços das variáveis caso precise misturar com ASM.

post-387879-0-38297400-1434405329.png

 

 

Este código deu 982 bytes.

fOcKCd.png

'Calculo do PI$regfile = "m16def.dat"'$NOINIT -  se não quiser inicialização automática.$crystal = 16000000                                                             ' used crystal frequency$baud = 19200Config Com1 = Dummy , Synchrone = 0 , Parity = None , _Stopbits = 1 , Databits = 8 , Clockpol = 0Dim S As Single , X As Single , Strg As String * 10S = Atn(1) * 4                                                                  'arcotangente de 1*4=PIStrg = Str(s)Print Strg                                                                      '3.141593End

@Isadora

edit:

Quer que eu faça exatamente como o seu, só que em bascom... é isto?

post-387879-0-03476900-1434405840.png

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Tem mais exemplos na pasta onde está instalado o bascom.

Aqui tem muitos exemplos (ANs) de programas avançados.

http://www.mcselec.com/index.php?option=com_content&task=category&sectionid=7&id=79&Itemid=57&limit=50&limitstart=0

 

Como este:

http://www.mcselec.com/index.php?option=com_content&task=view&id=227&Itemid=57

Link para o comentário
Compartilhar em outros sites

@Isadora Ferraz,

Naquela época eu estava com dificuldade de fazer alguma coisa mais séria com o Pic Simulator, ele não tinha outros periféricos, e nem tinha uma visualização melhor para o I2C e o SPI.

Conversando com o xikote, ele disse que tinha uma plataforma de programação em Basic que era muito superior ao Pic Simulator, só que ela só rodava nos AVR's, e me disse que esta linha de processadores era bem mais poderosa, tinha mais recursos e ainda custava menos ! Claro que na hora eu fiquei pensando comigo que isso não existia.... Até que resolvi baixar o datasheet de um Atmega8 e logo ví que ele estava falando sério.... Aí baixei o Bascom, experimentei alguns exemplos de programas e logo me sentí totalmente em casa, parecia que já usava ele faziam anos !

Comecei comprando um Attiny2313, e logo fiz coisas que nem sonhava com o Pic Simulator.... Poucos meses depois, comprei o Bascom oficial, e desde esse dia tive um retorno muito bom, fiz cerca de 12 projetos dedicados para algumas empresas, coisas bem simples mas que fazem elas economizarem um bom dinheiro, e todos estamos felizes kkkk !

Agora que o xicote também publicou o programinha em Bascom, voce viu que o tamanho é considerávelmente menor. Só falta ver os tempos de processamento !

Que tal carregar os dois .hex no Proteus, e ver como é o desempenho dos dois compiladores em termos de velocidade de execução no mesmo clock ?

Paulo

Link para o comentário
Compartilhar em outros sites

@_xyko_

 

As 81 linhas com 16 bytes cada  do seu código HEX deu 1296bytes.

Sem se intrometer,mas num arquivo padrão Inetl Hex,como o do exemplo,os 8 primeiros bytes de cada linha não fazem parte do código,são os endereços onde deve ser gravado os dados e o tipo de dado,e o ultimo byte é o Checksum de cada linha.

Os ultimos :00000001FF,indicam fim de arquivo,o resto são os dados em sí

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@_xyko_

Sem se intrometer,mas num arquivo padrão Inetl Hex,como o do exemplo,os 8 primeiros bytes de cada linha não fazem parte do código,são os endereços onde deve ser gravado os dados e o tipo de dado,e o ultimo byte é o Checksum de cada linha.

Os ultimos :00000001FF,indicam fim de arquivo,o resto são os dados em sí

Talvez isto explique como cheguei a 1296bytes.

16x81=1296 !!!

E ainda descartei a linha 82.

Pra alinhar e numerar as linhas foi fácil. Só colei o HEX dela no editor do bascom.

Zqw78l.jpg

Link para o comentário
Compartilhar em outros sites

@Isadora Ferraz,

Olha, não sei de onde voce tirou esse seu resultado para Pi .... nem na minha hp consegui mais do que os 4 primeiros dígitos depois da virgula corretos, isso fazendo a interação até 2700 .... !!

Vamos lá :

 

Primeiro, repare a clareza do código : totalmente direto, de facílima interpretação. Me parece muito mais enxuto do que o código original.

 

Segundo, repare a maneira elegante de se criar variáveis dentro de variáveis ( semelhante ao seu Union ), usando a técnica de Overlay. Assim também isolo os 4 bytes individuais da float sem nenhuma dificuldade.

$regfile = "m16adef.dat"$crystal = 3686400$hwstack = 80$swstack = 80$framesize = 80$baud = 2400Config Com1 = Dummy , Synchrone = 0 , Parity = None , _Stopbits = 1 , Databits = 8 , Clockpol = 0Dim Temp As SingleDim Pi As SingleDim Byte_1 As Byte At Pi OverlayDim Byte_2 As Byte At Pi + 1 OverlayDim Byte_3 As Byte At Pi + 2 OverlayDim Byte_4 As Byte At Pi + 3 OverlayDim X As WordPrint "Computando o valor de Pi..."For X = 1 To 2700    Temp = 4 / X  Pi = Pi + Temp  Incr X  Incr X  Temp = 4 / X  Pi = Pi - Temp  Incr XNextPrint "4 bytes asc-ii do pi:" ;Print Hex(byte_4) ; " " ; Hex(byte_3) ; " " ; Hex(byte_2) ; " " ; Hex(byte_1)End

Tamanho de 1312 bytes, bem próximo dos seus 1296 bytes. Se eu tivesse implementado o For X = 1 TO 2700 STEP 2 , provavelmente teria o mesmo tamanho. mas nesta versão em particular existe um bug quando usamos STEP com variável tipo Word, então tive de mudar um pouco.

j8ftsm.jpg
 

 

Resultados :

fz6ydd.jpg

Repare o tempo no Proteus, até o END : 0,594174014 segundos. Claro, com esse clock doido ....

Só que o meu resultado de Pi foi de 3,14085, com os bytes 40 49 03 B3.

Usei variável tipo Single, com tamanho de 4 bytes também.
Curiosamente, mudei para Double, e o resultado foi idêntico...
Sei que o Bascom trata Float de acordo com a norma IEEE, portanto deve estar certo, mesmo assim, para tirar a dúvida, fiz o programa na minha HP41CX, e também deu 3,14085 !

Você pode confirmar o seu resultado no Proteus ?

Paulo

Link para o comentário
Compartilhar em outros sites

@_xyko_,

Essa conta no programa original é feita com X, depois X+3, depois X+5, depois X+7 , e aí vai.

Se não me engano, essa série é a Série de Leibniz.

Repare que no meu código eu incrementei duas vezes, então onde você marcou x+2 na verdade seria x+3 . Antes do NEXT, eu incrementei de novo e fiquei com x+4.

E após o Next, como eu não declarei o STEP, ele incrementa em apenas um, totalizando x+5. Assim, a conta é feita exatamente como deve ser feita na Série.

O código está certo. Eu simulei na minha HP o mesmo código, porém indo até 100.000, e consegui 5 casas decimais de precisão.

Paulo

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...