Preguntas de Arduino y C para tal micro

Hola ., bueno basicamente tenes que tomar en cuenta el cristal externo ., y en base a eso se ve cual es la mejor frecuencia de trabajo
La confucion esta en que muchos no usan el cristal externo., entonces los calculos son en base al ocilador interno
Hay que fijarce bien el micro que se usa ( fundamental tener la hoja de datos del mismo) ., alli te dice claramente cual es la capacidad maxima admicible de cristal externo
Eso es fundaental a la hora de sacar los calculos para definir un PWM
En el caso de los AVR los fusebit se graban aparte y no van en la compilacion como los PIC
En los AVR alli (FUSEBIT) se define la frecuencia del cristal externo ., o interno segun el caso
Todo eso aunque parezca tonto es fundamental a la hora de elegir la frecuncia de PWM
Aca te paso un tuto de PWM-LED ., esta en aleman ., pero no es problema para google traductor
Eso si ., copia los ejemplos en idioma original ., sino el compildor no te reconose la sentencias (porque se cambiaron al traducirse)
Soft-PWM – Mikrocontroller.net
 
hola, si, estoy usando un arduino 1 .
pero queria saber con que frecuencia el pwm hace que un led se atenue bien. sin ser visibles parapdeos.
eso.
100 hz ??
1Khz ¿?
10 khz ??

luego si, yo vere de hacer un programa.
no les pido programas.
y se que el arduino 1 corre el ck a 16Mhz , eso lo se.
gracias igual.
 
Por defecto Arduino trabaja en torno a 1kHz, maso omenos, depende de los pines porque no todos van colgando del mismo timer.
Si cambias los usos de los timers, el uso de ciertos pines cambia y ya no puedes controlar un servo, por ejemplo.
Lee la documentación, está muy clara de que pin va como y de que depende.
 
Por defecto Arduino trabaja en torno a 1kHz, maso omenos, depende de los pines porque no todos van colgando del mismo timer.
Si cambias los usos de los timers, el uso de ciertos pines cambia y ya no puedes controlar un servo, por ejemplo.
Lee la documentación, está muy clara de que pin va como y de que depende.

por lo que lei en varios sitios en arduino dice ser de 500 hz.

otr aduda es ( acerca de el pwm y de todo, como ser instrucciones como millis() o micros:

imagino que , cuando uno elige la placa el lenguaje C esta reescrito o de algun modo sabe , por que no es lo mismo una placa arduino que corre con ck de 16 Mhz que otra de 8 mhz , o incluso vi unas de como 70 Mhz que usan arm de ST .
o sea, si pongo millis () el programa me da 1 milisegundo siempre ??
o es solo para el de 16 Mhz o sea el arduino 1 ??
 
Como los Arduinos corren a 16 Mhz, por defecto compila codigo para esa frecuencia. Hay una opcion en la configuracion del comando del compilador que podes cambiar si vas a usar otra fcia, pero no es facilmente accesible en el IDE de Arduino, al menos a mi me costo encontrarla.
De todas formas, con los Arduinos no tenes que cambiar nada, y hay que tener buenas razones para usar un xtal de menor frecuencia.
 
por lo que lei en varios sitios en arduino dice ser de 500 hz.

otr aduda es ( acerca de el pwm y de todo, como ser instrucciones como millis() o micros:

imagino que , cuando uno elige la placa el lenguaje C esta reescrito o de algun modo sabe , por que no es lo mismo una placa arduino que corre con ck de 16 Mhz que otra de 8 mhz , o incluso vi unas de como 70 Mhz que usan arm de ST .
o sea, si pongo millis () el programa me da 1 milisegundo siempre ??
o es solo para el de 16 Mhz o sea el arduino 1 ??
Si, pero has de elegir que placa usas para compilar, de hecho el código máquina de un ARM no correrá sobre otro micro.
Si no has cambiado el cristal de la placa, basta con seleccionar la placa que estás usando y ya está.
 
hola, estaba viendo de tener una placa extra de arduino para hacer pruebas en casa y no solo en el trabajo.
estaba mirando al arduino nano , que es mas economica que la 1 .

diganme si me equivoco :
son similares, pero solo ( para hacer pruebas) neensito entrar en la nano con fichitas hembra ( en la uno uso fichitas macho para los cables) .
mi unica duda que me queda es si le conecto el cable usb ( en el nano es mini usb) ya este usb me alimenta , me da alimentacion ??
para hacr pruebas de poco consumo, con unos pocos leds .

con el uno hago eso, NO necsito usar una fuente, directamente con el usb se alimenta.

con el nano es igual ??
 
Si bies es factible para unos pocos led no es aconsejable para nada, por otro lado al nano lo podes enchufar en una protoboard para trabajar cómodo o utilizar uno de los muchos shield que vienen para el mismo por ejemplo uno que te deja todos los pines con terminales atornillables
1541974044901.png
1541974187571.png
1541974272261.png
También tenes esta otra que te permite más cosas
1541974459824.png
La cual si le agregas las hembras en los bordes es como si fuera un arduino uno
 
okj, mil grcias , tengo que ir de compras en estos dias.

me gusto la de panda de el mini en la placa esa blanca, va ok, seguro renegare con eso de el programa que hay que bajar para el usb, ya que veo que todos usan el chip ese chino, creo que es ch430 .

pero bueno, de a poco, tendre que aprender a bajarlo asi le pierdo el cuco, casi todos vienen asi y son mas baratos.
 
hola, les consulto acerca de esto de arduino:

Arduino Reference

A function to compare a sensor input to a threshold

int checkSensor(){
if (analogRead(0) > 400) {
return 1;
}
else{
return 0;
}
}


mi consulta es la siguiente, ¿ por que define a checkSensor como int ??
no puede definirlo como boolean ??
si retorna 1 o 0
 
En los uC AVR la variable más chica es el byte, por más que intentes usar una definición de boolean, siempre terminás en un byte. En cambio hay uC como el 8051 que si te permiten trabajar a nivel de bit.

Lo que si es cierto, es que vez de trabajar con una variable de tipo "int" (16 bits en gcc para AVR) sería bueno trabajar con una del tipo "unsigned char" o "uint8_t".
 
okj, mil grcias , tengo que ir de compras en estos dias.

me gusto la de panda de el mini en la placa esa blanca, va ok, seguro renegare con eso de el programa que hay que bajar para el usb, ya que veo que todos usan el chip ese chino, creo que es ch430 .

pero bueno, de a poco, tendre que aprender a bajarlo asi le pierdo el cuco, casi todos vienen asi y son mas baratos.
Te comento el ch430 no es chino es de Texas Instruments, los clones chinos la utilizan preferiblemente, pero no tenes que bajar nada ya que lo reconoce inmediatemente y carga el drive correspondiente

He utilizado muchos nanos para diferentes proyectos.
Ojo, la placa que puse no es del mini, es la del nano, la mini no trae interface para el usb
Esta es la nao V3
1544316844170.png
y esta otra es la mini
1544316924329.png
para poder programarla necesitas una placa como esta más los cables hembra hembra para conectar con la placa mini
1544317170033.png
Te diré que sale más caro las dos placas que el nano, pero muchas veces por cuestiones de espacio se requiere la mini,
 
Te comento que el ch430 no es chino, es de Texas Instruments.
Los clones chinos la utilizan preferiblemente, pero no tenés que bajar nada, ya que lo reconoce inmediatamente y carga el drive correspondiente.
Creo que es CH340 y no CH430.
Yo tengo varios chips de esos y Windows 10 no tiene el controlador, lo tuve que descargar e instalarlo.
Posiblemente ya tenías instalado el controlador, u otra instalación lo hizo, pero por defecto no viene y siempre tengo que instalar el controlador en las PC en donde se va a usar.

Por si necesitan el controlador, aquí lo dejo.
 

Adjuntos

  • CH341SER.ZIP
    198.2 KB · Visitas: 6
hola, muchas gracias, si es el 340 , creo, y tuve que bajarlo.
es mas, no me andaba hasta que me avive ( gracias a un forero de la pagina de arduino) y el tema era seleccionar
atmega 328 P ( old bootleader) .

es cosa de agarrarle la mano al tema.
y estoy usando lo que me recomendo gruñon. que es la protoboard blanca esa para meter los componentes y ahi pinche al nano. ( mil gracias gruñon por el consejo) .


safsdaf
Si con ese cambio se llegara a conseguir un notable ahorro de memoria, entonces sería justificable cambiar el tipo.
es lo que es, quiero saber solamente, entre byte y int, pues hay un byte de diferencia.
lo mismo quie entre boolean y int.
pero es saber, solo eso .
En los uC AVR la variable más chica es el byte, por más que intentes usar una definición de boolean, siempre terminás en un byte. En cambio hay uC como el 8051 que si te permiten trabajar a nivel de bit.

.

seguro que el micro no tiene para trabajar a nivel de bits ?? los pic tienen , y el arduino ( no digo AVR que me suena a alien vs algun robot) , pero en arduino me parece qu esi puedo trabajar a nivel de bits, NO usarlo de variable en las instrucciones, pero si inventarme un par de registros de status y andar usando cad bit, con esas instrucciones de byte, que puedo usar como mascara AND u OR y andar escribiendo o leyendo bits....
pero bueno, no es tampoco para ahorrar , que es al cuete usualmente, hoy dia los micros les sobra memoria.
es solo para saber, estoy leyendo y probando .

E

Lo que si es cierto, es que vez de trabajar con una variable de tipo "int" (16 bits en gcc para AVR) sería bueno trabajar con una del tipo "unsigned char" o "uint8_t".

eso de "unsigned char" o "uint8_t"
me lo podrias explicar ?? o hay algun lugar en donde pueda leerlo / entenderlo ?? ?

mil gracias.
 
Última edición:
No conozco la arquitectura interna de los AVR, nunca los he programado en ensamblador.
Los 8052 pueden acceder directamente a cierto número de bits y eso permite hace con mucha facilidad operaciones con bits y definir variables como bits.
No todos lo permiten y a lo mejor necesitas hacer un AND, un OR para leer o escribir bits y eso retarda las operaciones y por ese motivo el que diseñó el compilador decidió que no se pudieran definir variables de bit ya que las operaciones de byte son mucho mas rápidas.

Puesto que son de 8 bits yo suelo definir siempre que puedo las variables como char o como byte en arduino, aunque no es wiring uso #define siempre que puedo y algunas cosas mas. No solo para ahorrar memoria sino que también para ganar velocidad.
 
A ver vamos a separar.

La mayoría de los Arduino usa uC AVR (creo que hay algunos modelos que usan uC ARM, pero eso es otro tema), por lo tanto, no importa que "capa" de sortware metas, siempre terminás en código de máquina, es decir en un assembler con las instrucciones que el uC por hard es capaz de ejecutar.

Los AVR, no son capaces de trabajar directamente con tipos de datos bit, tenés que usar máscaras o algo similar (es decir, usando bytes, forzar un bit a un cierto valor).

Los PIC usan otra arquitectura y son otro cantar (para bien o para mal, yo diría más para mal, por la falta de registros generales).

Vos querés trabajar a nivel de bit, pero el hard no lo permite, por lo tanto sin importar lo que hagas con el soft, vas a terminar trabajando a nivel de byte.

Esto es lo que a veces pone en evidencia a muchos usuarios de Arduino, una desconocimiento importante del hard, ya que el uso de las librerías incorporadas a veces nos facilita tanto las cosas que los objetivos se terminan alcanzando por igual, sabiendo o no el funcionamiento del hard.

Particularmente creo que si las cosas se resuelven con el menor esfuerzo, bienvenido sea. Pero hay veces que si o si, se necesita ir más allá de ese conocimiento mínimo para resolver ciertas cosas y por lo tanto hay que lidiar si o si con el hard.

Sobre "unsigned char", es un tipo de variable en C de 8 bit que equivale a un byte no signado, es decir su rango irá de 0 a 255. Un "char" es otra variable en C de8 bit que equivale a un byte signado, es decir su rango irá de -128 a 127.

La definión de "uint8_t" es una forma más "simpática" de referirse a un "unsigned char", ya que da a entender que la variable es del tipo entera sin signo de 8 bit y no un "char" (caracter).
 
De lo que yo sé y pueda llegar a recordar sobre mis inicios en programación, la variable mínima era un byte (8 bits)
Desconozco que se pueda obtener un valor más pequeño para un tipo de variable. (Hablando de microcontroladores)
Digamos que en Basic o C se puede declarar una variable del tipo boolean o bit, pero... ¿Cuál sería su postura física?
Creo suponer que se usa una variable de 8 bits y se descompone en sus respectivos 8 bits que el compilador podrá ocupar para alojar esas variables del tipo bit.
O sea qué, una variable del tipo byte podrá contener 8 designaciones del tipo bit o boolean, que es lo mismo.

De hecho, cuando requiero de varias banderas, opto por usar una variable byte y defino sus bits para usarlos como asignaciones de 1 y 0

Sin embargo, algo extraño ocurre cuando uso variables del tipo bit en C y luego trato de ver su estado en el simulador Proteus.
Aparece que ese tipo de variable no es reconocida, por lo cual cuando necesito simular, tengo que usar una variable byte para poder ver su valor.

No dudo que exista alguna información concreta al respecto, pero nunca me he interesado en averiguarlo.

Creo yo que en ese tipo de variables, es donde entra la magia de los compiladores de alto nivel.
 
Atrás
Arriba