Programação em Atmega usando AVR Studio 4

N

nXn

Guest
Oi ... Eu sou novo para avr programing.I tinha ido pensamento algumas folhas de dados e ter feito alguma tentativa de proraming.Starting off com o programa básico de leitura, se um pino é definido como alto e depois se definido alta pin outra para alta. Quando eu uso o código abaixo e tente não dar uma parte melhor output.The é que o compilador não mostra um erro. se PINC.0 == 1 PORTB = 0xff;. i não tenho certeza se a instrução PINC.0 é certo ajuda plz ...
 
oi ... uu pode usar o seguinte código ... if (bit_is_set (PINC, 0)) para a leitura de um valor de pin ..
 
certifique-se de definir a direção registros de dados ..
 
continuando a pergunta nXn: eu tinha a mesma pergunta sakthisa disse que uma solução, mas qual é a regra por que não funciona como em código nXn e que se eu queria o contrário, como eu queria, não baixo alto? obrigado
 
Você não pode usar um pouco da porta usando um código como PINA.0 ou PORTA.2, isso só pode ser feito em codevisionAVR porque o compilador é feito para reconhecer isso, em AVRstudio ele não compila. Se você quiser usar código como este você pode escrever [sintaxe = c] Estrutura / / para permitir operações de bit de campo, as conversões de nome: PORTA.0 -> PORT_A.b0 PORTB.7 -> PORT_B.b7 typedef struct {b0 uint8_t: 1; b1 uint8_t: 1; b2 uint8_t: 1; b3 uint8_t: 1; b4 uint8_t:; b5 uint8_t 1: 1; b6 uint8_t: 1; b7 uint8_t: 1;} bits; / / define todas as portas do seu microcontrolador # definir PORT_A (* (bits voláteis *) & PORTA) # define PIN_A (* (bits voláteis *) & PINA) # define DDR_A (* (bits voláteis *) & DDRA) # define PORT_B (* (bits voláteis *) & PORTB) # define PIN_B (* (bits voláteis *) & PINB) # define DDR_B (* (bits voláteis *) & DDRB) / / então você pode usar bits específicos como este para escrever ou ler bits específicos PORT_A.b0 = 1; / / escreve valor a bit PORTA 0 PIN_B.b4 = 0; / / escreve valor a PINB bit 4 [sintaxe /] Uma maneira melhor e mais rápido é usar isso [a sintaxe = c] / / adicionar este define # define SETBIT (BIT, endereço) (ADDRESS | = (1
 
Eu tentei o primeiro código, mas não funcionou .... eu escrevi assim: int main (void) {struct typedef b0 {uint8_t: 1; b1 uint8_t: 1; b2 uint8_t: 1; b3 uint8_t: 1; b4 uint8_t:; b5 uint8_t 1: 1; b6 uint8_t: 1; b7 uint8_t: 1;} bits; / / define todas as portas do seu microcontrolador # define PORT_A (* (bits voláteis *) & PORTA) # define PIN_A (* (bits voláteis *) & PINA) # define DDR_A (* (bits voláteis * ) & DDRA) # define PORT_B (* (bits voláteis *) & PORTB) # define PIN_B (* (bits voláteis *) & PINB) # define DDR_B (* (bits voláteis *) & DDRB) / / então você pode usar bits específicos como este / / PORTA.b0 = 1; / / PINB.b4 = 0; DDRA = 0xFF; DDRD = 0xFF; DDRC = 0x00; while (1) {if (PINB.b4 = 0) PORTD = 0xFF; if (bit_is_clear (PINC, 0)) PORTA = 0xff;} return 0;} também bit_is_clear (PINC, 0) não funcionou mas de qualquer maneira fazer u saber a melhor maneira de como conhecer e compreender a linguagem c em estúdio avr como ebooks, note que eu sei programação c + + na aplicação consle .... graças ....
 
Sim, isso foi um erro meu, você tem que usar PORT_B.b0 ou PORT_A.b1 ou usar o seu próprio costume nomes mas eles devem ser indefinido (por exemplo PORTA já é utilizado e não pode ser usado) por isso, se você mudar as linhas para [sintaxe = c] typedef struct {b0 uint8_t: 1; bit1 uint8_t: 1; bit2 uint8_t: 1; Bit3 uint8_t: 1; bit4 uint8_t: 1; bit5 uint8_t: 1; uint8_t Bit6: 1; bit7 uint8_t: 1;} bits; / / define todas as portas do seu microcontrolador # define aporte (* (bits voláteis *) & PORTA) # define APIN (* (bits voláteis *) & PINA) # define ADDR (* (bits voláteis *) & DDRA) [sintaxe /], então você pode usar APORT.bit0 = 1; Você também quer definir esses nas primeiras linhas do código após o # include para que eles estejam disponíveis em qualquer função, antes principal. algo como se bit_is_clear (PORTB, 1) {}; funciona bem para mim. Para tutoriais que você pode dar uma olhada no forum AVRfreaks Alex
 
Tentei o código mais uma vez sem os erros, mas ainda é um trabalho does't ....: # include int main (void) {struct typedef b0 {uint8_t: 1; b1 uint8_t: 1; b2 uint8_t: 1; b3 uint8_t: 1; b4 uint8_t:; b5 uint8_t 1: 1; b6 uint8_t: 1; b7 uint8_t: 1;} bits; / / define todas as portas do seu microcontrolador # define PORT_A (* (bits voláteis *) & PORTA) # define PIN_A ( * (bits voláteis *) & PINA) # define DDR_A (* (bits voláteis *) & DDRA) # define PORT_B (* (bits voláteis *) & PORTB) # define PIN_B (* (bits voláteis *) & PINB) # define DDR_B (* ( pedaços volátil *) & DDRB) / / então você pode usar bits específicos como esta / / PORTA.b0 = 1; / / PINB.b4 = 0; DDRA = 0xFF; DDRD = 0xFF; DDRC = 0x00; while (1) {if (PIN_B.b4 == 0) PORTD = 0xFF; se bit_is_clear (PORTC, 0) {}; PORTA = 0xff;} return 0;} deve transformar todos os leds no D porta fora quando eu ligar o pino B4 para o solo e assim se transforma todos os leds na porta quando eu ligar o pino C0 ..... mas o que está acontecendo é que todos os leds de iluminação desde r i ligar a energia ..... foxbrain
 
[Sintaxe = c] if (PIN_B.b4 == 0) PORTD = 0xFF; / / funciona bem na debbuger AVRstudio se bit_is_clear (PORTC, 0) {} / / você não adicionou o código para ser executado quando o é verdade PORTA = 0xff / / essa é sempre executado / / você provavelmente queria fazer se bit_is_clear (PORTC, 0) {PORTA = 0xff;} / / ou se bit_is_clear (PORTC, 0) PORTA = 0xFF; [sintaxe / ]
Quando eu uso o código abaixo e tente não dar uma parte melhor output.The é que o compilador não mostra um erro. se PINC.0 == 1 PORTB = 0xff;. i não tenho certeza se a instrução PINC.0 é certo ajuda plz ...
Como eu disse no post anterior, você não pode usar desta forma com AVRstudio, e isso não compila no meu AVRstudio4, eu recebo um erro [COLOR = "red "]../ test3.c: 36 : erro: objeto chamado '1 'não é uma função [/color] Alex
 
A maneira correta de ler um pino é quando você denunciar o sinal. Se o pino está conectado a um switch ou um dispositivo geralmente há picos em sinais real. Para se certificar de que você leia o nível desejado você tem que ler o pino por um período de tempo. O valor a lógica é obter pela maioria das amostras no período de denunciar. Desta forma você evita picos indesejados.
 
Sinto muito, porque estou atrasado para responder ..... alexan_e: a sua forma (código) trabalhou muito obrigado, mas quando eu usei: se bit_is_clear (PORTC, 1) {PORTA = 0xff;} else {PIN_A.b7 == 0;} não funcionou, o led está sempre ligada em.! então o que há de errado com ele? blind_man: o que ur falando é a tomar um sinal claro, sem qualquer perturbação, mas eu não preciso disso no meu circuito, porque eu estou com o objetivo sobre o uso de um interruptor quando é connnected para o chão (0v) de qualquer maneira graças à u todos. .....
 
PINA lê o estado de entrada do porto, você tem que usar PORTA para controlar a saída. Outra nota é que você use [B ]==[/B] em vez de = . Para definir o valor que você precisa usar = Alex

<span style="color: grey;"><span style="font-size: 10px">---------- Mensagem adicionada às 21:14 ----- ----- Mensagem anterior foi às 20:56 ----------</span></span>
Minha recomendação seria usar o SETBIT, etc CLEARBIT como se eu tivesse postado acima, eles são muito fácil de usar. [Sintaxe = c] # define SETBIT (BIT, endereço) (ADDRESS | = (1
 
graças que foi alex bom, mas o que usar "!" CHECKBIT antes para verificar se ele é 0 não funciona
 
! CHECKBIT funciona bem. Suponho que você não use parênteses, a instrução if deve ser colocado entre parênteses (), a macro CHECKBIT já está definido como um código que tem parênteses, mas se você adicionar o! na frente, então você tem que adicionar um parêntese assim if (! CHECKBIT (PINC, 1)) Alex
 
if {SETBIT (PORTD, 4);} (CHECKBIT (PINC, 1)!) else {CLEARBIT (PORTD, 4);}} que parece que está prestes a funcionar, mas o que está acontecendo é que o levou sempre a iluminação, mas quando eu, mas c1 a 0 que as luzes mais altas.
 
Você bit PORTD 4 como uma saída? (Usando SETBIT (DDRD, 4) ) Se não, então o pino é ainda uma entrada e tudo o que você faz é ativar / desativar o resistor pullup interno para o bit 4 do porto D. Alex
 
bem eu definir todas as portas no D como saída usando: DDRD = 0xFF; deveria ser especificado pelo pino?
 
Não, é a mesma coisa. você pode postar o esquema da ligação levou à MCU? Alex
 
Como eu pensei, você não usar um resistor para limitar a corrente do LED e isso é algo que você deve fazer para ter um qualquer circuito led. Assumindo que o seu Vcc é 5v ea levou tem cerca de queda de tensão 2v então o resistor pode ser calculada usando R = (Vcc-Vf_led) / I Normalmente a corrente utilizada é de cerca de 10 15mA para 10mA para nós (5v-2v) / 0,01 = 300 ohm (um resistor típico levou para 5v é de cerca de 220-300 ohm, dependendo da cor do LED e corrente) Você deve sempre limitar a corrente de saída das portas para evitar danos ao MCU. Alex
 

Welcome to EDABoard.com

Sponsor

Back
Top