Un amigo se compró el Teensy ++ 2.0. Ahora está ocupado en un empleo nuevo que consiguió y me lo prestó en este mismo momento para hacer pruebas, como Led parpadeante, apagar Led y endenderlo con un pulsador, etc, lo básico. No lo ha probado, sin embargo dice que es C y es fácil. Eso lo voy a comprobar si es tan fácil como dice. Él sabe C, yo no.
Al tenerlo en mis manos, me impresionó lo pequeño que es y su poco peso. Dentro de unas horas pondré capturas desde antes de abrirlo hasta abrirlo por si le pican la curiosidad algunos.
El SoftWare para trabajar con C me sorprendió ya que funciona bajo Windows, Linux e incluso Mac. (Lo mismo para el nuevo MPLAB X).
Lo bueno de la Web principal, me llamó la atención sus increíbles tutoriales bien hechos, organizados con imágenes incluidas para empezar con este tipo de prototipo. (Microchip.com debe coger este ejemplo, que espavilen o notarán ventas en AVR de Atmel que PIC de Microchip).
He visto por Internet muy animagos en hacer libros en español sobre AVR. Los de PIC hay libros de sobra y siguen apareciendo, falta por aparecer los PIC32 en español, en Inglés está desde hace tiempo.
Voy hacer pruebas por primera vez desde cero con este dispositivo explicado en la Web haber si es tan fácil al menos de encender y apagat Led partiendo de sus tutotirales.
¿Qué opinan del Teensy ++ 2.0?
Un cordial saludo.
PD: En unas horas subiré fotos sacadas desde un movil.
Esto es parecido a los Atmel que he utilizado yo, si tienes dudas en cuanto programacion, registro preguntame que te puedo ayudar, tanto en asm como en C. Estoy algo oxidado en cuanto programación ya que ahora ya no los programo pero para dudas puntuales no tengo problemas.
Lo que veo que está muy bien es que tiene 5 interrupciónes, yo los que he usado tienen 3, todo lo demás es lo mismo, por cierto tiene temporizadores?
Ni se cuál es el más sencillo, ahora acaba de avanzar un poco y me volví a atascar.
Buenas:
Por ahora lo que puedo mostrar son capturas de pantalla.
Estoy atascado y no se que hacer a partir de aquí. Recuerdo que no tengo ni la más idea de los AVR de Atmel y me cuesta el Inglés. Details In The Blinky Source Code
Using avr-gcc with the Teensy USB development board
Compilé el archivo make y me generó el .hex del AT90USB1826.
Parece que hay que seguir con este archivo llamado blicky.c, su código interior es:
Código:
/* LED Blink Example with USB Debug Channel for Teensy USB Development Board * http://www.pjrc.com/teensy/ * Copyright (c) 2008, 2010 PJRC.COM, LLC * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */
// set for 16 MHz clock, and make sure the LED is off CPU_PRESCALE(0); LED_CONFIG; LED_OFF;
// initialize the USB, but don't want for the host to // configure. The first several messages sent will be // lost because the PC hasn't configured the USB yet, // but we care more about blinking than debug messages! usb_init();
// blink morse code messages! while (1) { for (i=0; i<6; i++) { morse_P(PSTR("SOS")); _delay_ms(1500); } morse_P(PSTR("DOES ANYBODY STILL KNOW MORSE CODE?")); _delay_ms(4000); } }
// blink a single character in Morse code void morse_character(char c) { unsigned char code, count;
No veo ni rastro de esquema eléctrico para poner un Led. Como no conozco este dispositivo, no me quiero arriesgar a quemar, romper o lo que sea del Teensy y no es mio. Bastante he quemado PIC16F84A y 16F88 como para quemar un AVR sin estrenar, ejjejejeejejej. Por ahí debe haber algúl esquemita de lo que me está hablando, más que el Inglés me cuestra, capaz que me salté algo.
Subiré más fotos y vídeos del primer Led intermitente.
Parece que ahora falta un toque de acción. Antes ver esquema para conectar los Led y resistencias en sus debidos pines del Teensy ++ 2.0.
Por cierto, miré la hoja del datasheet, tienes 2 timers/counts configurables a 8 o 16 bits. Por otra parte, me he informado mejor de este dispositivo y por lo que entiendo tu problematica es la conexión USB.
Yo la verdad, en USB no he grabado micros, ya que tengo un grabador para pics mediante puerto serie, y un grabador para Atmel por puerto paralelo que me fabriqué yo.
La idea de integrar el grabador en el propio dispositivo (micro) es buena pero lo limita solo a practicar, que imagino que es tu objetivo. Creo que tu problema es que el micro tiene el sistema de grabacion "onchip" y tienes un programa en C y una explicacion en ingles y no te aclaras.
Lo que te recomiendo, es que si quieres aprender sobre Atmels, es que te hagas un grabador para atmel y compres algun micro Atmel ya que todos descienden del 8051 con un assembler de Intel, que eso acostumbrarte son 2 dias. Programarlos en C por eso tampoco es dificil. El que te recomiendo que es el que he usado mas es el: AT89C51 que tiene 4 puertos, interrupciones, temporizadores, posibilidad de memoria externa y no es nada dificil de utilizar.
Ademas puedes hacer el programa en C con el CCS por ejemplo y el HEX subirlo con icprog o algun entorno similar.
Lo digo porque el kit este que utilizas, estará muy bien, pero creo que es una pena que pierdas el tiempo mirando como grabar el micro, cogete por ejemplo el modelo que te recomendado ya que la utilización es la misma que los pics que usas.
Eso si, te tocará mirar los registros, banco de memoria,sintaxis de programacion, pines..ya que es arquitectura intel,pero eso te puedo ayudar.
Aquí te dejo esquemas de grabadores para atmel parecido al que monté yo, ya que los comerciales són muy caros, pueden llegar hasta los 3mil euros y no merece la pena comprar uno.
Si encuentro el esquema del mio te lo pongo o envio para que lo tengas.
« Última modificación: 22 Diciembre 2010, 14:18 pm por skapunky »
Por ahora estoy probando el Teensy ++ 2.0 que es lo unico que tengo. En el futuro habrá un Teensy ++ 3.0, eso no lo dudo. Mi problema ahora es entender este código que puse antes. Parece que hay que configurarlo y que tiene varios. Lo he posido grabar desde ubuntu el .hex.
Código
/* LED Blink Example with USB Debug Channel for Teensy USB Development Board
* http://www.pjrc.com/teensy/
* Copyright (c) 2008, 2010 PJRC.COM, LLC
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
// set for 16 MHz clock, and make sure the LED is off
CPU_PRESCALE(0);
LED_CONFIG;
LED_OFF;
// initialize the USB, but don't want for the host to
// configure. The first several messages sent will be
// lost because the PC hasn't configured the USB yet,
// but we care more about blinking than debug messages!
usb_init();
// blink morse code messages!
while(1){
for(i=0; i<6; i++){
morse_P(PSTR("SOS"));
_delay_ms(1500);
}
morse_P(PSTR("DOES ANYBODY STILL KNOW MORSE CODE?"));
_delay_ms(4000);
}
}
// blink a single character in Morse code
void morse_character(char c)
{
unsignedchar code, count;
if(c ==' '){
print("Space\n");
_delay_ms(DIT *7);
return;
}
if(c <'A'|| c >'Z'){
print("Opps, unsupported character: ");
pchar(c);
print("\n");
return;
}
print("Char ");
pchar(c);
pchar(':');
code = pgm_read_byte(morse_code_table +(c -'A'));
for(count = code &0x07; count >0; count--){
LED_ON;
if(code &0x80){
print(" dah");
_delay_ms(DIT *3);
}else{
print(" dit");
_delay_ms(DIT);
}
LED_OFF;
_delay_ms(DIT);
code = code <<1;
}
print("\n");
_delay_ms(DIT *2);
}
// blink an entire message in Morse code
// the string must be in flash memory (using PSTR macro)
void morse_P(constchar*s)
{
char c;
while(1){
c = pgm_read_byte(s++);
if(!c)break;
morse_character(c);
}
print("\n");
}
// lookup table for all 26 letters. Upper 5 bits are the pulses
// to send (MSB first), and the lower 3 bits are the number of
// bits to send for this letter.
constunsignedchar PROGMEM morse_code_table[]={
0x40+2,// A: .-
0x80+4,// B: -...
0xA0+4,// C: -.-.
0x80+3,// D: -..
0x00+1,// E: .
0x20+4,// F: ..-.
0xC0+3,// G: --.
0x00+4,// H: ....
0x00+2,// I: ..
0x70+4,// J: .---
0xA0+3,// K: -.-
0x40+4,// L: .-..
0xC0+2,// M: --
0x80+2,// N: -.
0xE0+3,// O: ---
0x60+4,// P: .--.
0xD0+4,// Q: --.-
0x40+3,// R: .-.
0x00+3,// S: ...
0x80+1,// T: -
0x20+3,// U: ..-
0x10+4,// V: ...-
0x60+3,// W: .--
0x90+4,// X: -..-
0xB0+4,// Y: -.--
0xC0+4// Z: --..
};
1) Quiero un código de ejemplo de parpadeo de Led. 2) He conseguido grabar el .hex con el código de arriba. 3) Un esquema eléctrico de una resistencia y un Led. Quiero saber el patillaje donde hay que conectarlo al menos. 4) Sospecho que el código de arriba hay que modificarlo y so varios programas en uno me da la impresión. Saludo.
No creo que el codigo que tienes sea el mejor ejemplo ya que depende de un display y tal, de todas formas para encender un led, simplemente conectalo en un puerto, por ejemplo el 4 (P4) y puedes enviar por una patilla directamente un estado alto o bajo de la siguiente manera:
sbit LED = P4^1; LED = 1;
Eso teniendo en cuenta que el otro lado está en una massa real, o dandole un 0 desde otro PIN que deberías definir. Por cierto puedes definir cada pin de cada puerto con la sintaxis que te puesto mediante "sbit" y activar ese pin asignandole un 1 logico.
Para apagar el Led simplemente:
LED = 0;
Debería apargarse.
NOTA: P4 es el puerto 4 del micro y lo tengo definido así en la libreria que uso, lo digo para que definas en tu caso correctamente el puerto en su direccion, lo puedes hacer en la cabezera con la sentencia "Define".
PD: Para encender y apagar mete eso en un bucle, si te quieres complicar puedes utilizar el temporizador de alguna forma.
« Última modificación: 22 Diciembre 2010, 22:56 pm por skapunky »
Como el que uso es el Teensy 2, quitaré las # y el código puede quedar así:
Código:
// Teensy 2.0: LED is active high if defined(__AVR_ATmega32U4__) || defined(__AVR_AT90USB1286__) define LED_ON (PORTD |= (1<<6)) define LED_OFF (PORTD &= ~(1<<6))
// Teensy 1.0: LED is active low #else #define LED_ON (PORTD &= ~(1<<6)) #define LED_OFF (PORTD |= (1<<6)) #endif
define LED_CONFIG (DDRD |= (1<<6)) define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) define DIT 80 /* unit time for morse code */
Justo debajo del Teensy 1 quité también las # del código de arriba.
Ahora voy a compilar y generar el .hex. Quiero saber el esquema eléctrico que todavía no conozco para hacer pruebas.
Leyendo bien puede ser quitando todas las #.
Código:
// Teensy 2.0: LED is active high if defined(__AVR_ATmega32U4__) || defined(__AVR_AT90USB1286__) define LED_ON (PORTD |= (1<<6)) define LED_OFF (PORTD &= ~(1<<6))
// Teensy 1.0: LED is active low else define LED_ON (PORTD &= ~(1<<6)) define LED_OFF (PORTD |= (1<<6)) endif
define LED_CONFIG (DDRD |= (1<<6)) define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) define DIT 80 /* unit time for morse code */
Parece que hay buen tutorial y esquemas para hacer cosas.
Edito:
He estado investigando y he aprendido solo cargar el hex al Teensy. Con todo lo que aprenda y que no se me olvide, les paso un mini manual de lo que he hecho hasta el momento, por ahora no es gran cosa. Según voy aprendiendo y descubirendo cosas con Teensy, lo iré actualizando con cualquier ejemplo, pondré fotos y vídeos.