Configurar puertos - ATmega8 en lenguaje C

#1
Quizás es algo muy trivial pero yo no sé y no he encontrado específicamente lo que busco así que recurro a este foro para ver si alguien me puede sacar de la duda.
Lo que pasa es que estoy simulando un sistema con el atmega8 en proteus y programado en c. La duda es si es que puedo activar un pin de salida para encender un led o hacer andar un motor dada cierta condición. EL código ya lo tengo hecho y todo funciona bien pero no puedo activar el pin que quiero para que encienda el led. El diodo está conectado al pin PB7 (en los demas pines tengo un display). Y la parte del codigo que lo activa dice algo así:

if(x > 0){
// aquí es donde tengo que activar el pin
PORTB = 0x00;
}

EL problema es que no sé que número poner en lugar de '00' para activar ese pin, si es que el comando estuviera bien. Si alguien puede responderme sería de gran ayuda.
Captura de pantalla (8).png Adjunto una imagen. Gracias por leer, saludos.
 
#2
Has declarado ese pin o el puerto como salida?
Pon todo el código
Debes asegurarte que el pin del puerto en cuestion este en "0" para luego encenderlo
Ten en cuenta que el micro no sabe nada y debes hacercelo saber, de lo contrario no entendera nada.....
 
#3
Has declarado ese pin o el puerto como salida?
Pon todo el código
Debes asegurarte que el pin del puerto en cuestion este en "0" para luego encenderlo
Ten en cuenta que el micro no sabe nada y debes hacercelo saber, de lo contrario no entendera nada.....
Arriba tengo las declaraciones y una de ellas es ese puerto completo. Me he fijado mientras se ejecuta y ese pin siempre está apagado (color azul).
Ya no estoy en el pc, así que no tengo a mano el código, de verdad que solo necesito como activar específicamente ese pin en un momento específico. Gracias por tu respuesta.
 
#4
En primer lugar, configuras como salida el pin en cuestión:
DDRB |= (1<<PB7)

Y ahora pones en alto ese pin:
PORTB &= (1<<PB7)

O lo pones bajo:
PORTB |= (1<<PB7)

O le cambias el estado, de alto a bajo o de bajo a alto, según fuese el caso. (Toggle le dicen en Inglés)
PORTB ^= (1<<PB7)


Y lo mejor de todo, en esto muchos serán irreductibles.

Tienes que leer la siguiente conversación:
[TUT] [C] Bit manipulation (AKA "Programming 101")
 
#6
En primer lugar, configuras como salida el pin en cuestión:
DDRB |= (1<<PB7)

Y ahora pones en alto ese pin:
PORTB &= (1<<PB7)

O lo pones bajo:
PORTB |= (1<<PB7)

O le cambias el estado, de alto a bajo o de bajo a alto, según fuese el caso. (Toggle le dicen en Inglés)
PORTB ^= (1<<PB7)


Y lo mejor de todo, en esto muchos serán irreductibles.

Tienes que leer la siguiente conversación:
[TUT] [C] Bit manipulation (AKA "Programming 101")
Muchas gracias!! Me sirvió al menos en otro pin. Pero surgió otro problema, ahora no se apaga jajajaja. La cosa es que cuando x es mayor a 0 se prenda, y cuando sea 0 se apague. Se prende pero cuando x llega a 0 no se apaga, probé con el PortD |= (1<<PD3) y con el de toggle, pero no me sirvió ninguno de los dos. Pero al menos avancé algo, gracias =D
------- Mensaje actualizado: -------

¿Qué compilador estás utilizando?
No sé bien a qué te refieres, pero recuerdo haber seleccionado algo de "WinAvr". Si no es eso no sé que sea.
 
#8
En primer lugar, configuras como salida el pin en cuestión:
DDRB |= (1<<PB7)

Y ahora pones en alto ese pin:
PORTB &= (1<<PB7)

O lo pones bajo:
PORTB |= (1<<PB7)

O le cambias el estado, de alto a bajo o de bajo a alto, según fuese el caso. (Toggle le dicen en Inglés)
PORTB ^= (1<<PB7)


Y lo mejor de todo, en esto muchos serán irreductibles.

Tienes que leer la siguiente conversación:
[TUT] [C] Bit manipulation (AKA "Programming 101")
si, si, si..... pequeño error ( y mortal!) , falto negar, como indicaron
:
PORTB &= ~(1<<PB7)


baja y leé ésto...

http://www.chwnku.tuxfamily.org/cont/AutoDocs/TutorialAVRdesde0.pdf
 
#12
Esta claro que no va poner su codigo, jeje.

Aprovechando este post quiero hacer una pregunta que me crea dudas, estoy empezando a leer sobre programacion avr y me encuentro con la primera sorpresa, esta claro que devo leer mas, la duda es esta,

Se supone que la programacion es C

DDRD = 0x01; // Pone al pin 0 del puerto D como salida el resto como entradas.
PORTD = 0x01; // Pone en nivel alto al pin 0 del puerto D.

Sin embargo si se hace con otro compilador de C, ejemplo: CCs compiler, lo mismo diria otra cosa.

TRISD= 0x01; // Pone al pin 0 del puerto D como entrada y el resto como salida, osea al reves.
PORTD=0x01; // Pone en nivel alto al pin 0 del puerto D.

Mi pregunta es, si hablamos de C por que no indican lo mismo los dos codigos?.
 
#13
Gracias a todos los que respondieron, estuve ocupado con otros trabajos y ayer en la noche logré terminar el proyecto en Proteus. Lo solucione todo con el PDF que está más arriba y arreglando unas líneas de código. Saludos a todos y muchas gracias =D
 
#14
Se supone que la programacion es C

DDRD = 0x01; // Pone al pin 0 del puerto D como salida el resto como entradas.
PORTD = 0x01; // Pone en nivel alto al pin 0 del puerto D.

Sin embargo si se hace con otro compilador de C, ejemplo: CCs compiler, lo mismo diria otra cosa.

TRISD= 0x01; // Pone al pin 0 del puerto D como entrada y el resto como salida, osea al reves.
PORTD=0x01; // Pone en nivel alto al pin 0 del puerto D.

Mi pregunta es, si hablamos de C por que no indican lo mismo los dos codigos?.
Porque lo que difiere no es el código en C (ambos tienen la misma finalidad, poner en 1 el bit indicado), sino el comportamiento del hardware.

Seguramente el pic al poner en 0 un bit del registro Tris'x', ese puerto queda como salida, eso es propio del comportamiento del hard y nada tiene que ver C, que solo hace lo que se le indica,.
 
#15
Mas o menos lo que vienes a decir cosmefulanito04 que es tema del fabricante, en su momento cuando diseño el hardware del microcontrolador, asi se diferenciaba de microchip, puede ser posible?. A todo esto, gracias por la explicacion.

No te sepa mal d000ble hubiese estado bien por tu parte que hubieses puesto tu trabajo, de esta manera da la impresion de que has utilizado el foro para tu fin y hasta luego.
 
#16
Mas o menos lo que vienes a decir cosmefulanito04 que es tema del fabricante, en su momento cuando diseño el hardware del microcontrolador, asi se diferenciaba de microchip, puede ser posible?. A todo esto, gracias por la explicacion.

No te sepa mal d000ble hubiese estado bien por tu parte que hubieses puesto tu trabajo, de esta manera da la impresion de que has utilizado el foro para tu fin y hasta luego.
Lo siento si se vió mal, pero el trabajo lo tengo desde el PC y anoche respondí en el celular. Cuando esté en el PC de nuevo puedo subir el código y una foto del circuito y así todo bien
 

Temas similares

Arriba