Micros Atmel AVR: Dudas & Programador

hola alguien me puede ayudar con mi codigo esta en bascom no se me apaga al iniciar el turnero la flecha ya que las flechas funcionan cuando el displays comienza a contar los tunos y junto a esto parparea un led de timbre aca les dejo la programacion:



Código:
$regfile = "m8def.dat"
$crystal = 8000000
'$baud = 9600

'******************* DipSwitch ***********************************************
Ddrc.0 = 0
Portc.0 = 1

Ddrc.1 = 0
Portc.1 = 1

Ddrc.2 = 0
Portc.2 = 1

Ddrc.3 = 0
Portc.3 = 1

Dipswitch Alias Pinc.0

'******************* Flecha Derecha ******************************************
Ddrc.4 = 1
Portc.4 = 0

Flechaderecha Alias Portc.4

'******************* Flecha Derecha ******************************************
Ddrc.5 = 1
Portc.5 = 0

Flechaizquierda Alias Portc.5

'******************* Speaker *************************************************
Ddrd.0 = 1
Portd.0 = 0

Speaker Alias Portd.0

'******************* Habilitar Display ***************************************
Ddrc.4 = 1
Portc.4 = 0

Habilita Alias Portc.4

'******************* Botones *************************************************


Ddrb.0 = 0
Portb.0 = 1
Boton1 Alias Pinb.0

Ddrb.1 = 0
Portb.1 = 1
Boton2 Alias Pinb.1

Ddrb.2 = 0
Portb.2 = 1
Boton3 Alias Pinb.2

Ddrb.3 = 0
Portb.3 = 1
Boton4 Alias Pinb.3

Ddrb.4 = 0
Portb.4 = 1
Boton5 Alias Pinb.4

Ddrb.5 = 0
Portb.5 = 1
Boton6 Alias Pinb.5

Ddrb.6 = 0
Portb.6 = 1
Boton7 Alias Pinb.6

Ddrb.7 = 0
Portb.7 = 1
Boton8 Alias Pinb.7
'******************* Display *************************************************
Ddrd.1 = 1
Portd.1 = 0
Ddrd.2 = 1
Portd.2 = 0
Ddrd.3 = 1
Portd.3 = 0
Ddrd.4 = 1
Portd.4 = 0
Ddrd.5 = 1
Portd.5 = 0
Ddrd.6 = 1
Portd.6 = 0
Ddrd.7 = 1
Portd.7 = 0
Ddrd.6 = 1
Portd.6 = 0
Const Delay1 = 80                                           'Delay 1
Const Delay10 = 10                                          'Delay 10
Const Delay500 = 500                                        'Delay 500

Dim Ram(4) As Byte

Dim A As Byte
Dim B As Word
Dim C As Word
Dim D As Byte
Dim F As Byte
Dim H As Word
Dim I As Byte
Dim W As Word
Dim X As Byte
Dim Y As Byte
Dim Z As Byte
Dim Unidades1 As Byte
Dim Pulsa1 As Bit
Dim Pulsa2 As Bit
Dim Pulsa3 As Bit
Dim Pulsa4 As Bit
Dim Pulsa5 As Bit
Dim Pulsa6 As Bit
Dim Pulsa7 As Bit
Dim Pulsa8 As Bit
Dim Pulsa9 As Bit
Dim Pulsa10 As Bit
Dim Pulsa11 As Bit
Dim Pulsa12 As Bit


Dim Pulses As Word , Periods As Word

'Pulses = 10 : Periods = 1                                   'set variables
Pulses = 1000 : Periods = 100
Unidades1 = 0
Habilita = 1
Gosub Display1

Do

   If Boton1 = 0 Then
      Waitms Delay1
      While Boton1 = 0
      Wend
      Waitms Delay1
      Unidades1 = 1
      Gosub Dips
      Gosub Display1
      Gosub Sonido
   End If
   If Boton2 = 0 Then
      Waitms Delay1
      While Boton2 = 0
      Wend
      Waitms Delay1
      Unidades1 = 2
      Gosub Dips
      Gosub Display1
      Gosub Sonido
   End If
   If Boton3 = 0 Then
      Waitms Delay1
      While Boton3 = 0
      Wend
      Waitms Delay1
      Unidades1 = 3
      Gosub Dips
      Gosub Display1
      Gosub Sonido
   End If
   If Boton4 = 0 Then
      Waitms Delay1
      While Boton4 = 0
      Wend
      Waitms Delay1
      Unidades1 = 4
      Gosub Dips
      Gosub Display1
      Gosub Sonido
   End If
   If Boton5 = 0 Then
      Waitms Delay1
      While Boton5 = 0
      Wend
      Waitms Delay1
      Unidades1 = 5
      Gosub Dips
      Gosub Display1
      Gosub Sonido
   End If
   If Boton6 = 0 Then
      Waitms Delay1
      While Boton6 = 0
      Wend
      Waitms Delay1
      Unidades1 = 6
      Gosub Dips
      Gosub Display1
      Gosub Sonido
   End If
   If Boton7 = 0 Then
      Waitms Delay1
      While Boton7 = 0
      Wend
      Waitms Delay1
      Unidades1 = 7
      Gosub Dips
      Gosub Display1
      Gosub Sonido
   End If
   If Boton8 = 0 Then
      Waitms Delay1
      While Boton8 = 0
      Wend
      Waitms Delay1
      Unidades1 = 8
      Gosub Dips
      Gosub Display1
      Gosub Sonido
    End If

Loop

Display1:
   Ram(1) = Lookup(unidades1 , Numeros)
   Portd.1 = Ram(1).1
   Portd.2 = Ram(1).2
   Portd.3 = Ram(1).3
   Portd.4 = Ram(1).4
   Portd.5 = Ram(1).5
   Portd.6 = Ram(1).6
   Portd.7 = Ram(1).0
Return
'******************************************************************************
Sonido:
   Sound Speaker , 65 , 1000                                'C2(1/16)
   For I = 0 To 12
    Gosub Display1
    Next I                                                  'P(1/16)
    Sound Speaker , 87 , 954                                'F2(1/16)
   For I = 0 To 12
    Gosub Display1
    Next I                                                  'P(1/16)
    Sound Speaker , 98 , 850                                'G2(1/16)
   For I = 0 To 12
    Gosub Display1
    Next I
Return
'******************************************************************************
Dips:
   C = Pinc

   C = C And &B11110000
   If C < Unidades1 Then
      Flechaderecha = 0
      Flechaizquierda = 1
   Else
      Flechaderecha = 1
      Flechaizquierda = 0
   End If
Return

Numeros:
Data 191 , 134 , 219 , 207 , 230 , 237 , 253,135,255,239

esta simulado en proteus

aqui esta el circuitoVer el archivo adjunto cc.bmp
 
Última edición por un moderador:
Que tal 'gonpa',
Se que es muy tarde para contestar pero mas vale tarde que nunca, creo que jamas se debe de estar por mucho tiempo en una llamada de interrupcion, no es lo coorecto en cualquier lenguaje. Que pasaria si en ves de pantalla LCD fueran displays de 7 segmentos multiplexados por algun momento no se veria algun segmento.

Talves deberias de utilizar un contador para interrumpir el programa principal y llamar la subrutina Teclado o aqui mismo ejecutar esa secuencia y activar una bandera, esta bandera le indicara al programa principal si se a precionado una tecla y poder ejecutar las subrutinas siguientes:

If Key_b = 1 Then
Gosub Borrar
Gosub Ingreso
Gosub Comprobar
End If

If Key_b = 2 Then
Gosub Borrar
Gosub Clave_vieja
Gosub Clave_nueva
Gosub Confirmar
Gosub Guardar
End If

Espero te sirva de algo o contesta si ya lo solucionaste y de que manera

Saludos...
 
hola mamun gracias por responder, ese codigo es parte del codigo que subi? igual no utilize la interrupcion por teclado, segui avanzando y bueno el proyecto quedo bien pero el proble que ando teniendo es que no se como grabar un vector o cualquier variable en la eeprom del atmega8:

me podrias brindar una rutina para grabar datos en la eeprom con bascom? en mi caso es un vector de 4 elementos o si puedes guiarme la verda ya no se como hacerlo.

y cuando termine subo el codico con los circuitos y todo para compartirlos aqui =)

desde ya muchas gracias!
 
Que tal gonpa,
Creo que no te gusta leer!!!, ignoro que problemas tuviste o que intentaste, pero esto es lo que dice el manual, espero te sirva.

'Syntax
'WRITEEEPROM var , address

'Syntax
'READEEPROM var , address

$regfile = "m48def.dat"
$crystal = 4000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40

Dim byte_eeprom As byte
Dim dato_byte as byte

Dim word_eerpom as word
Dim dato_word as word

byte_eeprom = 128
word_eeprom = 2010

Writeeprom byte_epeprom,1
Writeeprom word_epeprom,10

Readeeprom dato_byte,1
Readeeprom dato_word,10

Print dato_byte
Print dato_word

End
 
si lei todo pero el problema mio era que no estaba bien la logica de mi programa :LOL:, si grababa por que respete todas las sintaxis de la ayuda que trae bascom. ya lo solucione y anda perfecto! graba mi clave en eeprom sin problemas....muchas gracias igual!

estoy pensando en algun proyecto interesante a mi alcance con adquirir datos y guardarlos.

saludos
 
bueno basicamente tengo un equipo que tiene un AT 89S8252, el equipo me dice que tiene un problema logico,(prende un led indicando esto) mi consulta es la siguiente, alguien tiene un programador para este micro? alguien sabe como puedo leerlo y regrabarlo nuevamente aunque sea en uno nuevo? desde ya mil gracias
 
bueno basicamente tengo un equipo que tiene un AT 89S8252, el equipo me dice que tiene un problema logico,(prende un led indicando esto) mi consulta es la siguiente, alguien tiene un programador para este micro? alguien sabe como puedo leerlo y regrabarlo nuevamente aunque sea en uno nuevo? desde ya mil gracias

Esos uC se programan usando SPI.

Podés encontrar un programador basado en puerto paralelo, acá te dejo la página:

http://dybkowski.net/content/en/node/15

Después estoy casi seguro, pero como nunca lo probé no se si funcionará, que con el ponyprog, el programador de los AVR y un puerto serie, también podrías:



Si no me equivoco, deberías tener el PIN /EA a VCC, será cuestión de probar.
 
Muy buenas. Hoy compré un programador para el microcontrolador ATtiny84, para el cual necesito hacer una conexión a parte desde los pines de la salida del programador hacia el microcontrolador. La configuración de este microcontrolador es la siguiente:
pinattiny24.gif

y la configuración que debo lograr con la salida del programador es esta:
pinicsptiny24.png

Básicamente lo que no se es a que pin del microcontrolador corresponden el VDD, el VPP y el SCK.

Agradecería su ayuda!
 
Última edición por un moderador:
VDD = VCC
VPP sin usar
SCK = PA4 (USCK)

Crack! mil gracias, finalmente pude cargar el programa.

Ahora estoy teniendo un problema con un ATMEGA88.. bajé un programa de internet para este microcontrolador, el cual está diseñado para que 2 leds enciendan y apaguen a una cierta frecuencia, pero luego de ensamblar todos los componentes y ponerlo en marcha, me doy cuenta de que la frecuencia con que encienden y apagan los leds es mucho menor a la que debería funcionar. Revisé el programa y está bien.. Le cambié el cristal y sigue igual. Alguna idea sobre lo que podría estar sucediendo?

Gracias!
 

Amigo muchas gracias nuevamente.. Era ese el problema, crei que los bits configurados se cargaban junto con el programa y con tu comentario me di cuenta de que no era asi.
Gracias por tu tiempo!
 
Hola a todos, tengo un Atmega8515 16Pu y tengo que programarlo, alguien sabe si hay manera de programarlo haciendo algun circuito en un protoboard o alguna otra manera sin tener que usar la plaqueta programadora.

saludos y gracias
 
Claro solo busca "programador serial avr" y vas a encontrar varios muy sencillos que solo requieren del puerto serie de tu computadora un transistor y unas cuantas resistencias y el software puede ser el ponyprog
 
Atrás
Arriba