Autor Tema: Empezando con AVR  (Leído 46862 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Jorge555

  • PIC18
  • ****
  • Mensajes: 285
Re: Empezando con AVR
« Respuesta #120 en: 21 de Diciembre de 2009, 11:40:20 »
Hola ma4826, qué diferencia hay para el compilador entre hacer el primer búcle, sólo con la a, o hacer el segundo que indicas haciendo b = a ?. No entiendo porque el compilador ve un búcle que no hace nada en el primer caso y en el segundo no.

Gracias.

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 423
Re: Empezando con AVR
« Respuesta #121 en: 21 de Diciembre de 2009, 14:23:25 »
LA función si es llamada por la programa principal entones como puedes decir que no hace nada en otros compiladores no sucede eso, siempre la funcion en tomada en cuenta, solo en winavr sucede eso.
Prueba con el iar, codevisionavr o de mikroelectronica no pasa eso.

Desconectado cosmic

  • PIC16
  • ***
  • Mensajes: 175
Re:Empezando con AVR
« Respuesta #122 en: 07 de Marzo de 2017, 02:24:32 »
Hola amigos.
tengo este código en bascom avr, en la simulación proteus corre de maravilla, pero
al montarlo en el protoboard, la señal pwm solo alcanza el 40% en estado alto, y se desfasa al llegar al mínimo, provocando parpadeo en la lampara.
Se trata de un dimer ac, con un ATMEGA328P.
subo código y simulación.

$regfile = "m328Pdef.dat"                                   'ATmega8
$crystal = 8000000                                          'Frecuencia de cristal=8 MHz
$hwstack = 32                                               'Hardware Stack
$swstack = 10                                               'Software Stack
Config Portb = Output                                       'Puerto B como salida
Config Portc = Input                                        'Puerto C como entrada
 Config Portd.2 = Input
'Definicion de variables

                                         'Dato medido en ADC1=Sensor
Dim Rampa As Single                                         'Señal escalón

Dim D As Word                                               'Variable para lectura de potenciómetro
Dim T As Single
'Configuracion ADC

Config Adc = Single , Prescaler = Auto
Admux = $40                                                 '$40

 'Configuracion de unterrupciones
Config Int0 = Low Level
Enable Int0                                      'INT1, flanco de bajada
On Int0 Int_zc

Config Timer1 = Timer , Prescale = 1024                     'Configuración TIMER1, f=31.25 KHz
On Compare1a Int_timer1                                     'Interrupción por comparación
Enable Compare1a                                            'Habilitación interrupción por comparación

                                           'Interrupción externa INT1                                             'Habilitación INT1
Enable Interrupts                                           'Habilitación global de interrupciones

Timer1 = 0                                                  'Reinicialización de Timer1
Compare1a = 1
Stop Timer1
Rampa = 0                                                   'Reiniciar Rampa en cada Interrupción

'Programa principal
                                      'Reinicialización de Rampa
 Do
 nop                                                        'Bucle infinito
 Loop

'Rutinas de interrupción

'Interrupcion cruce por cero
 Int_zc:
   Stop Timer1
    Timer1 = 0
    Rampa = 0                                               'Interrupción cada 7*1/31250= 0.22 ms = 7.5ms/32

   Portb.0 = 0                                              'Señal a Triac =0
   'Obtensión de señales Referencia y Sensor
   Start Adc
   D = Getadc(0)

   Stop Adc

   T = D / 1023                                             '1024
   T = T * 360                                              'Rango 0 - 360 => precisión 0.5 grados.

     Start Timer1

   Return



'Interrupcion Timer  cada 0.22 ms 32 escalones por semiciclo
  Int_timer1:
   'Stop Timer1
   Timer1 = 0                                               'Reiniciar Timer1
   Rampa = Rampa + 2.8                                      'Incrementar rampa por cada interrupción


      If T > Rampa Then
      Portb.0 = 0                                           'Señal a Triac = 0
   Else
      Portb.0 = 1                                           'Señal a Triac =1

   End If
     'Start Timer1
   Return

End


« Última modificación: 07 de Marzo de 2017, 02:31:29 por cosmic »


 

anything