AVR Rapid Fire Mod ... Golpeo una pared y necesito ayuda

0

El título lo dice; Estoy haciendo un chip de disparo rápido con la familia de chips 328p en este momento (voy a escalar a lo que sea el chip más pequeño que tenga el software final de manera segura). Soy un fan de BASIC, así que estoy usando Bascom y un programador USBASP.

He conectado el chip con un reloj de 20Mhz y tapas de 22pF, así como un LED de estado / alimentación y una pantalla LCD para depuración visual (porque realmente hace una gran diferencia). Así que es una configuración muy básica.

Aquí está el problema: cuando estoy en la BB con un interruptor táctil regular, puedo hacer que el programa funcione completamente bien. Sin embargo, cuando ejecuto cables desde los puntos de contacto en el controlador y los conecto a los puntos correspondientes en el AVR, el programa actúa como si no hubiera un botón presente, o más bien parece que está actuando como si solo estuviera Manteniendo pulsado el botón, y no estoy. He intentado el lado alto, el lado bajo, todos los lados posibles, y no está funcionando como debería.

La mayoría de la gente usa los controladores PIC, y simplemente ejecutan los puntos de contacto del controlador directamente (o hasta 330R) sin ningún problema. He instalado muchos de estos para otras personas, y no es complicado. Entonces, en teoría, debería ser capaz de hacer lo mismo, ¿entonces por qué se está yendo?

Aquí está mi código de Bascom:

   'Name: Azula Outlaw Mod MCU Firmware
   'Version: a1
   'Designed by: Dominic M, Luciano
   'Development MCU: ATMega328P
   'Oscillator: 20 MHz Crystal
   'Copyright: (c) 2014-2015 Dominic M. Luciano, Luciano Incorporated, and Azula Microtech
   'All Rights Reserved.

   $regfile = "m328pdef.dat"
   $crystal = 2000000

   'PIN\IO INITS
   '---------------------------------------
   'OUT
   'Init LCD Backlight  (For Visual Debugging)
   LCDLIGHT Alias PortB.0
   Config LCDLIGHT = Output

   'Init PWR LED
   PWRLED Alias PORTB.1
   Config PWRLED = Output

   'IN
   'Init Function Switch, Start Pull Up
   F_SW Alias PinD.2
   PortD.2 = 1
   Config F_SW = Input

   'LCD INIT
   '---------------------------------------
   'Config the LCD for visual debugging
   Config lcd = 16 * 2
   Config lcdpin = PIN , DB4 = PORTD.4 , DB5 = PORTD.5 , DB6 = PORTD.6 , DB7 = PORTD.7 , E = PORTD.1 , RS = PORTD.0
   Config lcdmode = PORT

   'VARIABLE AND SUB CALLS
   '---------------------------------------
   Declare Sub FClick()
   Dim FCount as Byte
   Dim FState as Byte                                          'State flag

   'INTERRUPTS AND SLEEP\STANDBY
   '---------------------------------------

   'STARTUP SEQUENCE
   '---------------------------------------
   LCDLIGHT = 1                                                'Start LCD Backlight
   PWRLED = 1

   'MAIN LOOP
   '---------------------------------------
   Main:

   Cls
   LCD "No Activity"

   'Stabilize
   Waitms 250

   Do

   If F_SW = 1 Then

   If FState = 0 then
   Gosub FClick
   ElseIf FState = 1 Then
   Waitms 500
   FState = 0
   End If

   End If

   Loop

   'Subroutine for the function button
   '(The button that tells the AVR to take commands)
   Sub FClick()

   Cls
   LCD "Input Settings"

   '~2 second wait until reset and goto Main

   Dim Flash as Byte

   Do
   PWRLED = 0
   Waitms 500
   PWRLED = 1
   Waitms 500
   Incr Flash
   Loop Until Flash = 2

   'Change State Flag
   Incr FState

   'Set Vars
   Flash = 0
   FCount = 0

   'Exit Sub and Return to Main Loop
   Goto Main

   End Sub

Lo siento por cualquier desorden en mi código. Todavía es muy duro. Estaba tratando de bajar una subrutina porque el resto son básicamente las mismas subs básicamente.

Aquí hay una foto de mi espacio de trabajo. Una vez más, perdón por el lío:

Así que si puedes ofrecer alguna ayuda, te lo agradecería. ¡Gracias!

    
pregunta Dominic Luciano

2 respuestas

2

No estoy familiarizado con BASCOM pero ha hecho un montón de codificación C en Mega328s. No veo nada que encienda la resistencia interna pullup. PB.2 parece estar configurado como una entrada, pero nada indica un pullup. Por lo general, eso implicaría DDRB pero podría estar oculto en el código BASCOM. Intente simplemente agregar un pullup de 3.3K desde la entrada a Vcc, y conecte el interruptor entre la entrada y la tierra.

Jim Wagner Oregon Research Electronics

    
respondido por el James Wagner
0

En primer lugar, casi parece que tienes las conexiones de los botones hacia abajo y hacia la izquierda conectadas a tierra en el gamepad, en lugar del lado de la señal de los botones. Por lo que puedo ver en esa imagen, necesitará 4 cables que van al lado de la señal de los botones (el lado que no está conectado a la conexión a tierra), y otro cable que conecte la tierra del gamepad al suelo de su AVR.

Segundo, sospecho que su problema es un problema de cableado o de extracción, que es bastante fácil de diagnosticar midiendo el voltaje entre la conexión a tierra y los pines de entrada en el AVR. Cuando no se presiona el botón, debe leer 5 V y caer a 0 V cuando se presiona. Si el voltaje se está agitando en algún punto intermedio, es probable que no haya una resistencia que tire de ese lado hasta 5V (ya sea externamente o habilitando los pull ups internos), y una entrada flotante como esa solo hará estragos con el comportamiento del AVR.

    
respondido por el skyrift

Lea otras preguntas en las etiquetas