El reloj externo ATtiny no funciona

3

Por lo tanto, he estado queriendo romper con la abstracción arduino por un tiempo. Hice una placa que tiene un ATtiny10 con un cristal y una salida. Por mi vida no puedo entender lo que estoy haciendo mal.

Aquí está el problema: cuando selecciono la fuente del reloj, el AVR deja de funcionar.

Tuve un PCB personalizado (uno pequeño) hecho para montar todo. Pensando que no hice algo bien (aunque el esquema se veía bien)

Cambié el diseño e hice otro (para el segundo, tenía rastros con un reloj rodeado por un plano de tierra (No funcionó todavía) [También, el primer diseño estaba usando todo, excepto el AVR procedente de eBay. Pensando que tal vez fue un problema de calidad, la segunda placa se obtiene completamente de Mouser]

Por último, para asegurarme de que no era un completo idiota, compré una tabla de ruptura y acabo de rodar en el circuito. Esto todavía se realiza igual que todos los demás

Funciona bien con el oscilador interno, pero tan pronto como programo para cambiar la fuente del reloj, se detiene.

TengaencuentaqueagreguéR2paramantenerelMOSFEThaciaabajoperonolollenoparaprogramarlo,yaqueTPI(TinyProgrammingInterface)usapullupsenesalíneaynopuedorellenaresosivoyaprogramarelchip

Página21delahojadedatossobreelcambiodereloj

Página 22 de la hoja de datos sobre el prescaler (Clock prescaler not timer prescaler)

EstoyusandounprogramadorMkIIdeAtmelyestossonlosbitsdefusible:

Salidaderelojexterno

0xFB

EstoseconfiguróatravésdelestudioAtmelyheusadounpardeATtiny'sdiferentesyloschipsmantuvieronestosajustesunavezestablecidos,asíqueestoybastantesegurodequelosfusiblesseestánescribiendocorrectamente

Ahoraelcódigo:(Esteeselprogramacompleto,lapartedeltemporizadorfunciona(obviamentenounavezqueelrelojcambia))

#defineF_CPU8000000#include<avr/io.h>#include<avr/interrupt.h>voidinitClock(){//SettingCLKPSRdoesnotaffecttheproblem(Itdoesn'tworkregardlessofwhatthisissetto)//IhavetriedthisbeforeandaftersettingCLKMSRCCP=0xD8;CLKPSR=0;CCP=0xD8;CLKMSR=0b10;}voidinitPorts(){DDRB|=(1<<PORTB0);//PB0=OCR0A}voidinitTimer(){//Ipostedthiscodejustincase,thisworksasexpected(butonlyontheinternaloscillator)//WewantCompareOutputMode,ClearOC0AonCompareMatchTCCR0A=(1<<COM0A0);//OverflowsettingTIMSK0|=(1<<OCIE0A);//Wewillnotuseaprescaler//ThisalsostartsthetimerTCCR0B=(1<<CS00)|(1<<WGM02);//ThisisthevalueatwhichthetimerwillrestartOCR0A=8299;//Setexternalinterruptssei();}intmain(void){initClock();initPorts();initTimer();while(1){}}

Seguramentetienequehaberalgoquemeestoyperdiendo.Heintentadoleeryreleerespecialmentelasseccionesderelojdelahojadedatosparapoderresolverloyomismo.Aunqueestoyperplejo.Quizásalguienpuedaayudarmeaentendermierror.

¡Gracias!Déjemesabersihaymásinformaciónquepuedaagregarparaqueseamásfácildeentender

Hoja de datos de Attiny10

    
pregunta Dan

1 respuesta

6

No es posible utilizar el cristal de dos patas con el dispositivo específico. Solo existe la opción de usar una fuente de reloj externa, por lo que puede usar un oscilador externo como el siguiente y aplicar los pulsos de reloj al pin CLKI (pin 1).

A diferencia del cristal de dos patas que necesita circuitos adicionales dentro del mcu y dos capacitores, este oscilador de cuatro pines es un oscilador completo que solo necesita energía para generar el reloj.

    
respondido por el alexan_e

Lea otras preguntas en las etiquetas