código de la descripción del video & lt; code class = & quot; cpp & quot; & gt; #include & lt; avr / pgmspace.h & gt; // // Bytartakynov programado para ATtiny13 en Arduino IDE usando core13 http://sourceforge.net/projects/ard-core13/ #define PIN_LED 1 #define PIN_BUZZER 0 #define COUNT_NOTES 39 frecuencias de palabras [COUNT_NOTES] PROGMEM = {392 , 392, 392, 311, 466, 392, 311, 466, 392, 587, 587, 587, 622, 466, 369, 311, 466, 392, 784, 392, 392, 784, 739, 698, 659, 622 , 659, 415, 554, 523, 493, 466, 440, 466, 311, 369, 311, 466, 392}; duraciones palabra [COUNT_NOTES] PROGMEM = {350, 350, 350, 250, 100, 350, 250, 100, 700, 350, 350, 350, 250, 100, 350, 250, 100, 700, 350, 250, 100, 350, 250, 100, 100, 100, 200, 100, 350, 250, 100, 100, 100, 200, 100, 350, 250, 100, 750}; void setup () {pinMode (PIN_LED, OUTPUT); pinMode (PIN_BUZZER, OUTPUT); } Lazo vacío () {for (byte i = 0; i & lt; COUNT_NOTES; i ++) {zumbido (PIN_BUZZER, pgm_read_word (& amp; (frecuencias [i])), 2 * pgm_read_word (& amp; (duraciones [i])) ); retardo (100); } Delay (3000); } Zumbido Void (pin unsigned char, palabra frequencyInHertz, timeInMilliseconds palabra) {long DELAYAMOUNT = (largo) (largo (1000000) / (longitud) frequencyInHertz); largo LOOPTIME (largos) (((largos) timeInMilliseconds * 500) / DELAYAMOUNT); para (a largo i = 0; i & lt; looptime; i ++) {digitalWrite (pin, HIGH); delayMicroseconds (DELAYAMOUNT); digitalWrite (pin, LOW); delayMicroseconds (DELAYAMOUNT); }} & Lt; / Código & gt; pre> El tamaño del boceto en código binario: 946 bytes (de 1024 bytes como máximo)
Como se puede ver, hay dos arrays frecuencias - traducido del Inglés frequency y duraciones - duración, todas las palabras de tipo de datos, PROGMEM - los datos se almacenan en el microcontrolador de memoria flash (sin el uso de la biblioteca pgmspace.h no funcionará) Bueno, hay un generador de frecuencia buzz (), que toma tres parámetros - el pasador, que se genera la frecuencia, la segunda - la frecuencia en hercios, y el tercero -. la duración en milisegundos
Este código debe ser Arduino compatible y trabajar incluso en Arduino Uno, Arduino Nano o Arduino Pro Mini y otros bien y Duino.
Como se puede escuchar en el video, el sonido de mis vídeos es ligeramente diferente del segundo video, el hecho de que soy un pequeño cambio de la duración de las notas y tres veces como método popular de "lanza científica", planteó la frecuencia, ya que un pequeño altavoz tal como me malas jugadas aquellas frecuencias que eran originalmente, y añadir un botón, lo que timbre sin botones?
Un poco corregido por él mismo y comentada & lt; código class = & quot; cpp & quot; & gt; // Bytartakynov: // // http://youtu.be/5R7NeQkVS_8 y yo - vk.com/razniepodelki #define F_CPU 1200000L // frecuencia en hertz MK #include & lt; avr / pgmspace.h & gt; // Necesidad de PROGMEM #define PIN_BUZZER 2 // PB2 Altavoz BOTÓN #define botón 4 // PB4 #define COUNT_NOTES 39 // número de frecuencias notas palabra [COUNT_NOTES] PROGMEM = {// aquí son la frecuencia 392, 392, 392, 311, 466, 392, 311, 466, 392, 587, 587, 587, 622, 466, 369, 311, 466, 392, 784, 392, 392, 784, 739, 698, 659, 622, 659, 415, 554, 523, 493, 466, 440, 466, 311, 369, 311, 466, 392}; duraciones de palabras [COUNT_NOTES] PROGMEM = {// aquí sus duraciones 350, 350, 350, 250, 100, 350, 250, 100, 700, 350, 350, 350, 250, 100, 350, 250, 100, 700, 350 , 250, 100, 350, 250, 100, 100, 100, 450, 150, 350, 250, 100, 100, 100, 450, 150, 350, 250, 100, 750}; // Configura Void () // {int main (void) // esta es una configuración vacío analógico (), para ahorrar espacio {pinMode (PIN_BUZZER, OUTPUT); // Inicializar el pasadores pinMode (BUTTON, INPUT); // Conecte un digitalWrite resistencia pullup (BOTÓN, HIGH); // Botón para volver al // BAJA cuando //} // void loop () {// while (1) {// analógica void loop () (bucle infinito) si (digitalRead (BOTÓN) == LOW) {/ / cuando se pulsa el botón para (byte i = 0; i & lt; COUNT_NOTES; i ++) // en realidad pierdo sintonizar {zumbido (PIN_BUZZER, pgm_read_word (& amp; (Fréquences [i])) * 3, 2 * pgm_read_word (& Amp; (duraciones [yo]))); // ¿Fue originalmente: // zumbido (PIN_BUZZER, pgm_read_word (& amp; (frecuencias [i])), 2 * pgm_read_word (& amp; (duraciones [i]))); // Pero yo multipliqué frecuencia 3 // (pgm_read_word (& amp; (frecuencias [i])) * 3) // que sea más fuerte audible en el pequeño altavoz // retardo (100); // No es necesario}} // retardo (3000); // Y esto} // estas líneas deben volver 0; // Int main (void)} // y mientras (1) vacío zumbido (pin unsigned char, palabra frequencyInHertz, timeInMilliseconds palabra) // en realidad {// generador de frecuencia a largo DELAYAMOUNT = (largo) (largo (1000000) / (largo) frequencyInHertz); // El parámetro tiene tres largos LOOPTIME (largos) (((largos) timeInMilliseconds * 500) / DELAYAMOUNT); // 1 - pin para (a largo i = 0; i & lt; looptime; i ++) // 2 - {// frecuencia 3 - duración digitalWrite (pin, HIGH); // Generar las delayMicroseconds impulsos de frecuencia que desee (DELAYAMOUNT); digitalWrite (pin, LOW); delayMicroseconds (DELAYAMOUNT); }} & Lt; / Código & gt; pre> El tamaño del boceto en código binario: 976 bytes (de 1024 bytes como máximo)
Como se puede ver, añadir la respuesta cuando se pulse el botón supera 1.024 bytes, y tuvo que insertar fragmentos de código C para caber en ATtiny13.
Frecuencia de elevada líneas zumbido (PIN_BUZZER, pgm_read_word (& (frecuencias [i])) * 3, 2 * pgm_read_word (& (duraciones [i]))); multiplicando la frecuencia generada como a determinar tres, esto es puramente mi capricho, no puede multiplicar nada en absoluto.
Si usted es un arduinschik experimentado, creo aviso en el código que he hecho resistencia software ascensor PULLUP al PB4 puerto.
Para aquellos que no lo conocen se hace para:
Exposición en el puerto de entrada; Ideas y que la unidad lógica. Ahora, el puerto será la tensión es aproximadamente igual a la tensión de alimentación, si este puerto está cortocircuitado a tierra, que va a cambiar su estado de una unidad lógica a cero lógico, con el microcontrolador al mismo tiempo no sufrirá, ya que utiliza una resistencia interna cuyo valor 10-100 ohms.
Lo hice simplemente para ahorrar espacio en la placa, sólo puede soldar resistencia a 10k además de comida y el puerto deseado pulsando el botón que "atraemos puerto a la tierra", y sería cero lógico.
Añadir un código para limpiar AVR-C de mano de obra AVR'schikov:
Código para AVR-C & lt; code class = & quot; cpp & quot; & gt; // Bytartakynov: // // http://youtu.be/5R7NeQkVS_8 y yo - vk.com/razniepodelki #define F_CPU 1200000UL // frecuencia en hertz MK #include & lt; avr / io.h & gt; // Biblioteca #include Input Output & lt; util / delay.h & gt; // Biblioteca para hacer frente a los retrasos #include & lt; avr / pgmspace.h & gt; // Necesidad de PROGMEM #define PIN_BUZZER 2 // PB2 Altavoz BOTÓN #define botón 4 // PB4 #define COUNT_NOTES 39 // número de frecuencias notas palabra [COUNT_NOTES] PROGMEM = {// aquí son la frecuencia 392, 392, 392, 311, 466, 392, 311, 466, 392, 587, 587, 587, 622, 466, 369, 311, 466, 392, 784, 392, 392, 784, 739, 698, 659, 622, 659, 415, 554, 523, 493, 466, 440, 466, 311, 369, 311, 466, 392}; duraciones de palabras [COUNT_NOTES] PROGMEM = {// aquí sus duraciones 350, 350, 350, 250, 100, 350, 250, 100, 700, 350, 350, 350, 250, 100, 350, 250, 100, 700, 350 , 250, 100, 350, 250, 100, 100, 100, 450, 150, 350, 250, 100, 100, 100, 450, 150, 350, 250, 100, 750}; // Configura Void () // {int main (void) // esta es una configuración vacío analógico (), para ahorrar espacio {DDRB | = (1 & lt; & lt; PIN_BUZZER); // Puerto initsyalizatsiya DDRB & amp; = ~ (1 & lt; & lt; BOTÓN); // Conecte un PORTB resistencia pullup | = (1 & lt; & lt; BOTÓN); // // Este botón restablece a 0 cuando se pulsa (zamykinii) //} // void loop () {// while (1) {// analógica void loop () (bucle infinito) if ((PINB & amp;! (1 & lt ; & lt; BOTÓN))) {// cuando se pulsa el botón para (byte i = 0; i & lt; COUNT_NOTES; i ++) // en realidad perder sintonía {zumbido (pgm_read_word (& amp; (frecuencias [i])) * 3 2 * pgm_read_word (& amp; (duraciones [i]))); // ¿Fue originalmente: // zumbido (PIN_BUZZER, pgm_read_word (& amp; (frecuencias [i])), 2 * pgm_read_word (& amp; (duraciones [i]))); // Pero yo multipliqué frecuencia 3 // (pgm_read_word (& amp; (frecuencias [i])) * 3) // que sea más fuerte audible en el pequeño altavoz} // _ delay_ms (100); // Para la depuración} // _ delay_ms (3000); // Para la depuración} // estas líneas deben volver 0; // Int main (void)} // y mientras (1) // vacío zumbido (pin unsigned char, palabra frequencyInHertz, timeInMilliseconds palabra) vacío zumbido (palabra frequencyInHertz, timeInMilliseconds palabra) // en realidad {// generador de frecuencia larga DELAYAMOUNT = (largo) (largo (1000000) / (longitud) frequencyInHertz); // El parámetro tiene tres largos LOOPTIME (largos) (((largos) timeInMilliseconds * 500) / DELAYAMOUNT); // 1 - pin para (a largo i = 0; i & lt; looptime; i ++) // 2 - {// frecuencia 3 - duración // digitalWrite (pin, HIGH); // Generar pulsos de la frecuencia deseada PORTB | = (1 & lt; & lt; PIN_BUZZER); // Para save'll poner puntos de sutura en C // delayMicroseconds (DELAYAMOUNT); // Sra retraso en la _delay_us Arduino (DELAYAMOUNT); // En C // digitalWrite (pin, LOW); PORTB & amp; = ~ (1 & lt; & lt; PIN_BUZZER); // delayMicroseconds (DELAYAMOUNT); // Sra retraso en la _delay_us Arduino (DELAYAMOUNT); // En C}} & lt; / Código & gt; pre>
Parece como debe compilar sin problemas, pero cuando se utiliza este código en el Arduino IDE de alguna manera el tamaño del archivo hex de por lo menos duplicado "El tamaño del boceto en código binario:. 1986 bytes (1024 bytes del máximo)"
Como me enteré de todo esto desde el _delay_us uso (*); aunque arduinovskaya delayMicroseconds función (*); básicamente hace lo mismo, creo que es archivos del kernel Incidencias para tini13, que se ramifican en el de burgueses foro Arduino a > donde tomé los archivos del kernel, aunque muy poco modificado por sí mismo, una referencia a los archivos principales modificados que tengo en el artículo sobre firmware ATtiny13 utilizando el Arduino < / a>.
Si alguien puede ayudar a lidiar con este error sólo será feliz, porque teóricamente Arduino IDE debe tragar fácilmente código C-shny.
Bueno, algunas palabras sobre el firmware - el primer video Tin'kov corrieron a una MHz de frecuencia 1.2, en cuanto a mí, por lo que 1,2 millones de operaciones suficientes para jugar su canción favorita mientras no comer mucho, por el hex-file forma en que se compilan en esta frecuencia.
Aquí Fyuz de calculadora Fyuz :
texto oculto
Ahora, cualquiera que tenga AVR programador puede repetir este dispositivo.
Como se prometió en el principio de este artículo aquí todos los archivos necesarios .
Y, por último - "Sí llegar con usted la fuerza."
Fuente: habrahabr.ru/post/234763/