Atmel vs Microchip

Estado
Cerrado para nuevas respuestas.
Con los sistemas electronicos cada ves mas complejos el asm esta desapareciendo del repertorio de habilidades de un electronico-programador, yo aprendi el asm en los C51 pero cuando conoci el C en los AVR, ya no volvi a el asm.

Ya se que diran que asm aqui y asm allá, pero a mi en lo personal no le veo mucho caso aprender asm, por el simple hecho de que hasta con cada micro aunque sea de la misma familia va haber diferencias.

Esta es mi muy personal punto de vista y no esta a discusion jajaja
 
Por defecto las compañias que venden microcontroladores ya te venden librerias para cada microcontrolador, las librerias me refiero son a los registros que tiene el microcontrolador y listo, dicen que el C es lento a comparacion del ASM, pero hoy en dia los microcontroladores ya operan hasta 100 Mhz o mas, se trata de hacer proyectos rapidos para vender, un desarrollador debe de sacar un producto rapido entonces opta por programar en C.

El ASM el que quiera aprender esta la puerta abierta, pero el proyecto puede tomar mucho tiempo dependiendo de la complejidad, y en C el tiempo se reduce drasticamente.

El motivo de aprender C es desarrollar rapidos productos, eficientes en cuestion de migrar a otros microntroladores el mismo codigo y ahorrar tiempo.

Saludos!
 
Mejor sigo con lo mismo de siempre, elijo el chip adecuado para la aplicación adecuada, no haré un complejo controlador con un PIC, como les dije, aquí son carisimos, es más barato si importo, y si tengo que pedirle a Newark los chips ¿por que no mejor elegir el chip más adecuado?, un PIC16f819 me costó cerca de 7USD, eso cuesta mi MSP430F5510, y las capacidades no tienen comparación, multiplicador de hardware, DMA, USB..., otro ejemplo, un PIC18F2550 me lo venden como a 15USD, por ese costo a Newark le pido los ARM.
 
Con los sistemas electronicos cada ves mas complejos el asm esta desapareciendo del repertorio de habilidades de un electronico-programador, yo aprendi el asm en los C51 pero cuando conoci el C en los AVR, ya no volvi a el asm.

Ya se que diran que asm aqui y asm allá, pero a mi en lo personal no le veo mucho caso aprender asm, por el simple hecho de que hasta con cada micro aunque sea de la misma familia va haber diferencias.

Depende de la aplicación, hay rutinas (no el proyecto, sino rutina que las podés llamar como funciones) que lamentablemente con C te quedás corto, por ej. sintetizar una señal mayor a 100kHz. Después veo si subo la nota de aplicación de Atmel con un tutorial simple para hacer esto.

Por otro lado estamos todos de acuerdo que lo mejor es hacer el proyecto en C, por sencillez y portabilidad.

Una cosa importante que se pierde de vista desde el punto de la electrónica, a mayor frecuencia de clock mayor consumo y a la vez se agregan más problemas para eliminar los ruidos en el PCB, ojo con eso, no siempre la escopeta es la mejor solución .
 
Última edición:
antes de caer si es ASM o C
es mas bien logica de programacion

como decia cosme hace unos comentarios atras es como hacer un filtro digital
una FPGA no usa instrucciones por asi decirlo mas bien es hardware con arrays de compuertas

y no se usa ASM ni C se usa VHDL pero hay interpretes C que igual el codigo VHDL lo hace aun mas grande

pero uno con buena logica de programacion puede entender el ASM ,C ,C++ ,C# ,VHDL ,etc.
y como digo no hay libro alguno que te diga como interpretar AVR ,ARM ,Arduino ,PIC para entenderle a todos al mismo tiempo

digo los nintendo DS traen de nucleo el ARM7 y para programarlo basta con usar ANSI C y descargar el compilador Dev kit Pro
en pocas palabras no es una gran ciencia programar diferentes plataformas mas bien lo que cuenta

como dice Cosme es la eficienecia tanto en memoria y reloj
 
Hola:

Mejor aprender C que asm a estas alturas si quieres hacer algo rápido y medio fácil.

Mi lenguaje favoritoes C#, hay cosas como Arduino que aún no está extendido, lo que pasa que usa ARM lo bueno, y lo que la gente no le hace gracia es a Microsoft.

resizer.aspx


http://www.netmf.com/showcase.aspx?ShowcaseID=1&id=140

Más que pelearte con el asm, antes de usaba muchísimo, los nuevos se estresan exceptuando al que le guste el desafío. Siempre hay de todo.

c%255B1%255D.png


Saludo.
 
Una cosa importante que se pierde de vista desde el punto de la electrónica, a mayor frecuencia de clock mayor consumo y a la vez se agregan más problemas para eliminar los ruidos en el PCB, ojo con eso, no siempre la escopeta es la mejor solución .

Entonces con más motivos un chip correcto en lugar de forzar otro, y menos PIC ya que son famosos por solo trabajar a 1/4 de la frecuencia y reiniciarce aleatoriamente :LOL:

antes de caer si es ASM o C
es mas bien logica de programacion

como decia cosme hace unos comentarios atras es como hacer un filtro digital
una FPGA no usa instrucciones por asi decirlo mas bien es hardware con arrays de compuertas

y no se usa ASM ni C se usa VHDL pero hay interpretes C que igual el codigo VHDL lo hace aun mas grande

pero uno con buena logica de programacion puede entender el ASM ,C ,C++ ,C# ,VHDL ,etc.
y como digo no hay libro alguno que te diga como interpretar AVR ,ARM ,Arduino ,PIC para entenderle a todos al mismo tiempo

digo los nintendo DS traen de nucleo el ARM7 y para programarlo basta con usar ANSI C y descargar el compilador Dev kit Pro
en pocas palabras no es una gran ciencia programar diferentes plataformas mas bien lo que cuenta

como dice Cosme es la eficienecia tanto en memoria y reloj

Si yo me voy más por eso de la lógica, empecé programando en VB.net, luego conseguí un libro de C#, aprendí el C cuando intenté usar un PIC18F4550 que fue el primero que usé, luego ya me cambié a los MSP430, pero todo es igual, la sintaxis cambia, lo importante es escribir bien tu lógica, pensar en bits no en números, yo tiendo a reciclar mis variables boleanas por que no existen en el chip una variable que solo de 1 o 0, no se como lo toma el compilador, si las fusiona o como un byte completo y desperdicia memoria, prefiero generar una variable y usar bitwise para controlar los if o while y reusar la memoria, veo una rutina y si siento que cambiando de lugar una función por otra se puede reducir los procesos que se tienen que hacer lo hago, programo en C, pero con la mayor eficiencia que me es posible, tomo el proyecto y lo divido en múltiples funciones, programo mi código principal hasta hacer que funcione y luego voy optimizando cada función lo más que sea posible.
 
Hola:

Esa es la ventaja del C. De todas maneras en Microchip, ya usan hasta el C++, ya iba siendo hora, es má potente y flexible, lo que nadie está acostumbrado.

A usar C para lo que sea, esa es la gran ventaja.

Saludo.
 
Entonces con más motivos un chip correcto en lugar de forzar otro, y menos PIC ya que son famosos por solo trabajar a 1/4 de la frecuencia y reiniciarce aleatoriamente :LOL:

No esa la idea. Con assembler usás menos clk para obtener el mismo resultado que en C (independientemente del uC), esto insisto en caso en los que requiera esa optimización, cosa que en la mayoría de los proyectos no suceden.

Lo que si es cierto, es que no podes tampoco pedirle a una carreta hacer el trabajo de un avión, pero volviendo al ej. que puse del AVR, ese código es C requiere más clk para completar lo mismo que en assembler, lo que reduce la frecuencia de salida que se puede obtener de un generador de señales.

Sobre PIC, es una gota en el océano, particularmente me parecen lo peorcito en cuanto uC, caro, arquitectura pobre, etc. Lo que destaco de ellos es el post-ventas como ya mencioné, el usuario tiene todo al alcance de la mano. Incluso aprender su arquitectura super bizarra termina confundiendo más :unsure:.
 
sigo creyendo que los pic son famosos por mercadeo y documentacion en español
que otros micros que son de poca documentacion o la documentacion solo esta en ingles

ahora VC++ es lo mismo que C# solo cambias puntos por flechas y viseversa
C++ pues es que en C++ puedes mandar llamar clases y estructuras

dudo mucho de quienes programaron desde siempre VB y que pasaron a C#
y digan que C++ para micros es mejor que C si no saben usar C++ ni el ANSI C

eso se lo creeria de quienes iniciaron con Turbo C o Dev C o similares
y C es solo el ANSI C
 
Holas:

VC++ dejó de usar Windows Form desde el 2010, el 2012 y 2013 ya no lo incluyen, por algo será. Solo VB y C#.

VC++ no es solo lo que dices, lo he probado desde hace tiempo, es más engorroso de programar que C#.

C++ está por encima de C, de la plataforma que sea. VC++ me ha decpcionado.

Quiero pasar este código de VC# o VB a VC++ para el Visual Studio 2013, ya no se puede, habrá que usar modo consola de Win32 o el CLR. No se ni cual es más aconsejable.

VC++
Código:
System::Void Button_Generar_Click(System::Object^ sender, System::EventArgs^  e)  {     try     {         textBox_Password->Text = Calculo_Password(textBox_seedNumber->Text);     }     catch (Exception^ ex)     {         MessageBox::Show("Los números deben ser de 12 cifras hexadeximales [0-9, A-F, a-f]", "Error", MessageBoxButtons::OK, MessageBoxIcon::Error);     }  }  String^ Calculo_Password(String^ seedNumber) {     int num = Convert::ToInt32(seedNumber->Substring(0, 6), 0x10);     int num2 = num + 0x10f0a563;     int num3 = Convert::ToInt32(seedNumber->Substring(10, 2), 0x10) & 7;     int num4 = (num2 >> num3) | (num2 << (0x20 - num3));     num4 ^= num;     return num4.ToString("X"); }
VB 2013
Código:
Public Class Form1

    Private Sub Button_Generar_Click(sender As Object, e As EventArgs) Handles Button_Generar.Click
        Try
            textBox_Password.Text = Calculo_Password(textBox_seedNumber.Text)
        Catch ex As Exception
            MessageBox.Show("Los números deben ser de 12 cifras hexadeximales [0-9, A-F, a-f]", "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
        End Try
    End Sub

    Private Function Calculo_Password(seedNumber As String) As String
        Dim num As Integer = Convert.ToInt32(seedNumber.Substring(0, 6), &H10)
        Dim num2 As Integer = num + &H10F0A563
        Dim num3 As Integer = Convert.ToInt32(seedNumber.Substring(10, 2), &H10) And 7
        Dim num4 As Integer = (num2 >> num3) Or (num2 << (&H20 - num3))
        num4 = num4 Xor num
        Return num4.ToString("X")
    End Function
End Class
VC#
Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ZyXEL
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button_Generar_Click(object sender, EventArgs e)
        {
            try
            {
                textBox_Password.Text = Calculo_Password(textBox_seedNumber.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Los números deben ser de 12 cifras hexadeximales [0-9, A-F, a-f]", "Error",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            } 
        }

        private string Calculo_Password(string seedNumber)
        {
            int num = Convert.ToInt32(seedNumber.Substring(0, 6), 0x10);
            int num2 = num + 0x10f0a563;
            int num3 = Convert.ToInt32(seedNumber.Substring(10, 2), 0x10) & 7;
            int num4 = (num2 >> num3) | (num2 << (0x20 - num3));
            num4 ^= num;
            return num4.ToString("X");
        } 
    }
}

En el telediario en España, se dice hace un año que Java es el lenguaje más utilizado, en ciclo superior de programación que estoy cursando en estos momentos, que ya acabé Java, nos cuenta lo mismo, es lo que te pide las emrpesas, y por encima de Visual studio.


Saludo.
 
Todos esos lenguajes tienen una carencia que C no tiene y por eso se usa en uC, puede apuntar a memoria sin ninguna limitación, tanto C++ como Java, eliminaron el concepto de puntero a propósito para que el programador no se mande cagadas. Además están las interrupciones, en Java tenés que crearte librerías propias llamadas JNI (que no son más que librerías hechas en C) si las liberías propias que traen no te sirven.

La evolución lógica de C, es usar RTOS y seguramente en algún futuro no muy lejano los uC serán casi una PC integrada con distintos tipos de periféricos, donde se podrán incluir SO con todas sus API y System call's y ahí si seguramente se usen lenguaje orientados a objetos.
 
La evolución lógica de C, es usar RTOS y seguramente en algún futuro no muy lejano los uC serán casi una PC integrada con distintos tipos de periféricos, donde se podrán incluir SO con todas sus API y System call's y ahí si seguramente se usen lenguaje orientados a objetos.

Lo veo lejano, no en los SmartPhone e incluso hasta router van a toda leche en los menús, al menos los nuevos.


PIC32 está el de 80 MHz y los más nuevos a 200 MHz, se puede programar en C de toda la vida y en C++ con más opciones de hacer cosas según he leído por Internet. Por algo han invertido en C++ tiempo y dinero para PIC. Total, con C parece que la gente se conforma, hasta con Linux, jejeje.

Linus odia C++.
http://www.theinquirer.es/2007/09/24/linus_odia_c.html

Saludo.
 
Lo que planteo no necesariamente debe tener entorno gráfico, simplemente las APIs y los System Calls.

Sobre Linux, la verdad ni idea sobre ese odio a C++, pero por ej el kernel está hecho en C (obviamente no usa assembler por compatibilidad, además de lo difícil que sería implementarlo). Por lo tanto en C resulta muy sencillo agarras las APIs y los System calls del SO, eso es una gran ventaja.
 
Ahora que lo menciona Meta, con razón ya no entiendo un carajos de VC++ :cabezon: solo lo usé en la 2005 y 2008, recuerdo que podía hacer forms, pero ahora no encuentro por ningún lado esas opciones, pero bueno, como encontré un libro de C# en una feria a 4USD pues me quedé con ese lenguaje .net

No dices más que gilipolleces. C++ es un lenguaje horrible. E incluso es más horrible por el hecho de que un montón de programadores de segundo nivel lo usan, hasta el punto de que es aún más y más fácil generar basura sin utilidad con él. Sinceramente, incluso si la decisión de haber usado C no tuviera *nada* más que ver con el hecho de mantener a los programadores de C++ fuera del proyecto, esa hubiera sido una gran razón para usar C.

jajajaja XD pues no se que tiene el C++, se que es C pero orientado a objetos, aún así yo no programo en C++ por que al menos en microcontroladores el C alcanza para todo, el C++ estaría bueno si la aplicación recurre a bastantes instancias de las mismas tareas, ahí es donde la POO brilla, pero estamos programando un pequeño chips o una simple tarea no cientos, entonces no hace falta.

Siendo honesto ni a mi me gusta usar el concepto de clases cuando programo en C# por que raramente los necesito, pero era C# o VB y la sintaxis del VB ya me revuelve :p de todas formas los dos son iguales al compilarse.

Genial!!, mbed ya corrigió el problema al exportar el código, ahora ya puedo compilarlo con el GNU GCC, mi mayor problema con no usar IDEs es que no entiendo como hacer el makefile :cabezon:
 
Última edición:
desgraciados makefile, como odio eso, cuando me mude un rato a linux makefiles por aqui makefiles por alla y me volvia loco jejeje.

Eso del C++ para microcontroladores creo que le quedan grande para micros de 8 y 16 bits, como bien dices con C alcanza y sobra, no obstante todo eso que tiene que ver con los ARM ahi si usan mucho el C++, yo hace mucho que no uso en C++, hamm pero todavia me acuerdo de class, private, public protected, friend, los :: hamm virtual etc etc. condenado C++ se ma hacia tan confuso hasta que encontre un buen libro de un tal luis de jujuy o algo asi ya no recuerdo su nombre, era un libro bien sencillo pero bien explicado y por desgracia lo preste y fue de esos prestamos que nunca regresaron

El libro era con portada azul con el C++ hecho con cuadritos como en 3D, el autor era luis joyanes creo, haber si alquien lo ubica
 
bueno si VC++ y C# son decir microsoft pues C# es una creacion de microsuave

yo uso VC no por necio ni nada de eso si no por retrocompatibilidad con los viejos sistemas operativos y maquinas de bajo rendimiento "asi lo piden en mi trabajo".

el C# para hacerlo correr en otra maquina hay que descargar varias cosas instalarlas y hacer que la maquina pentium 3 saque su ultimo aliento

otra cosa los ejemplos ahora estan casi en C# y cuando uno quiere hacerlo correr en VC++ solo cambia uno los puntos por flechas y eso es todo.
no hay diferencia notoria a grandes rasgos

si es cierto que hay micros que soportan ya en C++ y los que dicen AIFONS no tienen un microcontrolador si no un CPU y una arquitectura mas parecida a una PC

por eso soportan JAVA ,C++ ,USB OTG ,ETC.
un dia llegaran microcontroladores que soporten todo eso ahi si creeria la programacion en C# para un microcontrolador

pero como digo prender un LED y un RELE es absurdo seria matar una mosca con ametralladora
 
Microchip.com aunció el C++ par sus PIC, lo que no recuerdo si es para todos o solo para lso de 32 bits.

Total, da igual, presume que C++ hace más cosas aunque sea matando moscas a cañonazos. ¿Por qué y para qué hacen C++ para PIC?

Se que habrá también para otros microcontroladores.

El C# para ARM que hizo Microsoft no está nada extendido como Arduino. Ojalá se extienda, que C# es mi languaje favorito.

Si quieres programar C/C++, Python y cosas de esas pues a por RaspBerry Pi, y en sus salidas Arduino como actuador o otros microcontroladores.

Hay muchos lenguajes de programación, ahora ya no es por necesitades, sino el más que te guste.

Ah, aún se siguen programando en todo el año ASM en los cursos, FP o ciclos y universidades. El C o Java lo usan para PC como es lógico.

¿Por qué se empeña en las clases a enseñar a los alumnos en santo ASM? ;)

Algunos les parece gracioso y pérdida de tiempo. Ahora me lo parece, es engorroso y cabrea, jajajaja.

gffff.jpg
 
Usar C para desarrollar aplicaciones en PC es como usar assembler en uC, de cavernícolas.

Son contados los casos en que C puede ser útil en ese entorno, por ej. Linux para alguna aplicación de servidor o que requiere tomar recursos mediantes las System call de ese SO, Matlab y alguna aplicación que requiera manipular el hard y use a C como intermediario (símil a usar assembler desde C).

Para lo demás, sin dudas el paradigma orientado a objetos es lo mejor, por un tema de seguridad, nadie se mete con estas variables si yo no lo permito y todo queda encapsulado.

Trabajar con Java, C++ y supongo que los demás lenguajes como C# es una ventaja de orden frente al lenguaje estructurado de C que a medida que avanza el proyecto (a mucho mayor escala que en uC), cuesta mantenerlo.
 
Estado
Cerrado para nuevas respuestas.
Atrás
Arriba