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!