Atmega4808 Uart

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2572
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Atmega4808 Uart

Príspevok od používateľa maskrtnik01 » 02 Máj 2020, 15:00

Dobrý večer,

Chcel by som poprosiť o pomoc. Trápim sa s UART2 na Atmega4808. Skúšal som Atmel Studio, MPLAB X. Vlastný kód, MPLAB Code Configurator. Interné hodiny 16M, externý oscilátor 8M(kmitá stabilne, aj keď nie ideálny obdĺžnik). Chcel by som baudrate 500k, ale ani 115200 mi nešlo.

Proste tento obrázok by malo byť dookola písmeno A(0x41) na 500kbaud. Neviem čo je tomu mcu, ale posiela blbosti.

Kód: Vybrať všetko

#include <avr/io.h>
#include <avr/interrupt.h>

char str[12] = "RehaPiano\r\n";

int main(void)
{
    //Configure clock
    CPU_CCP = 0xD8;
    CLKCTRL_MCLKCTRLA = 0x83;
    CPU_CCP = 0xD8;
    CLKCTRL_MCLKCTRLB = 0x00;
    while(CLKCTRL_MCLKSTATUS != 0x80);
    //Configure GPIO
    PORTA_DIR = 0xDE;
    PORTC_DIR = 0x0C;
    PORTD_DIR = 0xFF;
    PORTF_DIR = 0x3D;
    PORTA_OUT = 0x02;
    PORTC_OUT = 0x0C;
    PORTD_OUT = 0x00;
    PORTF_OUT = 0x00;
    PORTC_PIN0CTRL = 0x03;
    PORTC_PIN1CTRL = 0x03;
	//Configure UART
	USART2_BAUDL = 128;
	USART2_BAUDH = 0;
	USART2_CTRLC = 0x03;
	USART2_CTRLB = 0xC0;
	USART2_CTRLA = 0xC0;
	while(1)
	{
		for(uint8_t i = 0;i < 12;i++)
		{
			USART2_TXDATAL = "A";
			while((USART2_STATUS & 0x40) != 0x40);
		}
	}	
}

Takto napríklad som to skúšal. Ale aj iné IDE, iné hodiny, cez spomenutý configurator....nič. Už mi z toho hrabe.
Prílohy
MAP001.png
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Atmega4808 Uart

Príspevok od používateľa peterple » 02 Máj 2020, 17:03

Nerozumiem ako si to predstavuješ. S prerušením alebo bez neho? Momentálne je to nejaký kočkopes. Povolíš prerušenie od odvysielania a od príjmu, ale nikde nemáš napísané tie obsluhy. Čo asi urobí ten MCU keď sa to prerušenie aktivuje?
Ak bez prerušenia tak ten posielací cyklus musí zhadzovať príznak vyslatia znaku. Len aby reč nestála prečo nepoužívaš symbolické mená miesto tvrdých hexa hodnôt?
Alebo to tam luskol za teba ten konfigurátor? Asi ďalší dôvod prečo ho nepoužívať.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2572
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Atmega4808 Uart

Príspevok od používateľa maskrtnik01 » 02 Máj 2020, 17:48

Generátor zo seba dostal iný kód, je rozsiahlejší tak som ho neuviedol. Ale ani to nefungovalo.

Tu je usart2.c z vygenerovaného kódu:

Kód: Vybrať všetko

#if defined(__GNUC__)

int UartPc_printCHAR(char character, FILE *stream)
{
    UartPc_Write(character);
    return 0;
}

FILE UartPc_stream = FDEV_SETUP_STREAM(UartPc_printCHAR, NULL, _FDEV_SETUP_WRITE);

#elif defined(__ICCAVR__)

int putchar(int outChar)
{
    USART0_Write(outChar);
    return outChar;
}
#endif

void UartPc_Initialize()
{
    //set baud rate register
    USART2.BAUD = (uint16_t)USART2_BAUD_RATE(115200);
	
    //RXCIE disabled; TXCIE disabled; DREIE disabled; RXSIE disabled; LBME disabled; ABEIE disabled; RS485 OFF; 
    USART2.CTRLA = 0x00;
	
    //RXEN enabled; TXEN enabled; SFDEN disabled; ODME disabled; RXMODE NORMAL; MPCM disabled; 
    USART2.CTRLB = 0xC0;
	
    //CMODE ASYNCHRONOUS; PMODE DISABLED; SBMODE 1BIT; CHSIZE 8BIT; UDORD disabled; UCPHA disabled; 
    USART2.CTRLC = 0x03;
	
    //DBGCTRL_DBGRUN
    USART2.DBGCTRL = 0x00;
	
    //EVCTRL_IREI
    USART2.EVCTRL = 0x00;
	
    //RXPLCTRL_RXPL
    USART2.RXPLCTRL = 0x00;
	
    //TXPLCTRL_TXPL
    USART2.TXPLCTRL = 0x00;
	

#if defined(__GNUC__)
    stdout = &UartPc_stream;
#endif

}

void UartPc_Enable()
{
    USART2.CTRLB |= USART_RXEN_bm | USART_TXEN_bm;
}

void UartPc_EnableRx()
{
    USART2.CTRLB |= USART_RXEN_bm;
}

void UartPc_EnableTx()
{
    USART2.CTRLB |= USART_TXEN_bm;
}

void UartPc_Disable()
{
    USART2.CTRLB &= ~(USART_RXEN_bm | USART_TXEN_bm);
}

uint8_t UartPc_GetData()
{
    return USART2.RXDATAL;
}

bool UartPc_IsTxReady()
{
    return (USART2.STATUS & USART_DREIF_bm);
}

bool UartPc_IsRxReady()
{
    return (USART2.STATUS & USART_RXCIF_bm);
}

bool UartPc_IsTxBusy()
{
    return (!(USART2.STATUS & USART_TXCIF_bm));
}

bool UartPc_IsTxDone()
{
    return (USART2.STATUS & USART_TXCIF_bm);
}

uint8_t UartPc_Read()
{
    while (!(USART2.STATUS & USART_RXCIF_bm))
            ;
    return USART2.RXDATAL;
}

void UartPc_Write(const uint8_t data)
{
    while (!(USART2.STATUS & USART_DREIF_bm))
            ;
    USART2.TXDATAL = data;
}
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Atmega4808 Uart

Príspevok od používateľa peterple » 02 Máj 2020, 18:16

No tak to skúsme s tým tvojím kódom. Zruš tam to povolenie prerušení od príjmu a vysielania. A daj vyslať iba jeden byte. Žiadny cyklus. Potom sa uvidí čo ďalej.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2572
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Atmega4808 Uart

Príspevok od používateľa maskrtnik01 » 02 Máj 2020, 18:33

Ktorý presne bit v control registroch máte na mysli? Tie PINxCTRL sú prerušenia k inému.

Zajtra skúsim.

EDIT: Aha jasné, CTRLA.
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2572
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Atmega4808 Uart

Príspevok od používateľa maskrtnik01 » 03 Máj 2020, 09:37

Chvála Bohu, podarilo sa mi rozbehať aspoň jednu perifériu. Neviem čo bol včera za deň.

Kód: Vybrať všetko

#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>

static int Uart_Tx(char c, FILE *stream)
{
	while(!(USART2_STATUS & USART_DREIF_bm));
	USART2_TXDATAL = c;
	return 0;
}

static FILE UartOut = FDEV_SETUP_STREAM(Uart_Tx,NULL,_FDEV_SETUP_WRITE);

int main()
{
	 CPU_CCP = 0xD8;
	 //External clock, clock output enable
	 CLKCTRL_MCLKCTRLA = CLKCTRL_CLKOUT_bm | CLKCTRL_CLKSEL_gm;
	 CPU_CCP = 0xD8;
	 //Clock prescaler disable
	 CLKCTRL_MCLKCTRLB = 0;
	 
	 PORTA_DIR = 0b11011110;
	 PORTC_DIR = 0b00001100;
	 PORTD_DIR = 0b11111111;
	 PORTF_DIR = 0b00111101;
	 PORTA_OUT = 0b00000000;
	 PORTC_OUT = 0b00001100;
	 PORTD_OUT = 0b00000000;
	 PORTF_OUT = 0b00000000;
	 PORTC_PIN0CTRL = PORT_ISC0_bm | PORT_ISC1_bm;
	 PORTC_PIN1CTRL = PORT_ISC0_bm | PORT_ISC1_bm;
	 PORTF_PIN6CTRL = PORT_PULLUPEN_bm;
	 
	 //500kbaud at 8MHz system clock
	 USART2_BAUD = 64;
	 USART2_CTRLA = USART_RXCIE_bm;
	 USART2_CTRLB = USART_RXEN_bm | USART_TXEN_bm;
	 stdout = &UartOut;
	 
	 while(1)
	 {
		 printf("Heartbeat\r\n");
		 for(uint16_t i = 0;i < 65535;i++);
	 }
}

ISR(PORTC_PORT_vect)
{
	
}
ISR(USART2_RXC_vect)
{
	PORTA_OUTTGL = 0x02;
}
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2572
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Atmega4808 Uart

Príspevok od používateľa maskrtnik01 » 03 Máj 2020, 11:36

Kód: Vybrať všetko

volatile uint32_t ticks;

void SysTick_Init()
{
	ticks = 0;
	TCB0_CCMP = 4000;
	TCB0_INTCTRL = TCB_CAPT_bm;
	TCB0_CTRLA = TCB_ENABLE_bm | TCB_CLKSEL0_bm;
}

uint32_t SysTick_GetTicks()
{
	uint8_t old = CPU_SREG;
	uint32_t t;
	cli();
	t = ticks;
	CPU_SREG = old;
	return t;
}

ISR(TCB0_INT_vect)
{
	if(TCB0_INTFLAGS & TCB_CAPT_bm)
	{
		ticks++;
		TCB0_INTFLAGS = 0;
	}
}
Teraz mám problém s periodic interrupt. Keď si pošlem hodnotu z GetTicks do pc, rastie nejako prirýchlo. Mal by to byť čas v milisekundách.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Atmega4808 Uart

Príspevok od používateľa peterple » 03 Máj 2020, 21:08

a čo to je prirýchlo? Ako vieš že to nie je OK? Len z toho že ti po obrazovke rýchlo letia výpisy? Daj si do toho prerušenia negáciu nejakého pinu. Zmeraj to skopom a potom je nad čím mudrovať.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2572
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Atmega4808 Uart

Príspevok od používateľa maskrtnik01 » 03 Máj 2020, 23:28

Tu je jedno či mi príde 100 čísiel z sekundu, alebo jedno za desať sekund. Ale nie je to čas v milisekundách.
Dám tam zajtra toggle a som zvedavý.
0

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6205
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: Atmega4808 Uart

Príspevok od používateľa pocitujlasku » 04 Máj 2020, 08:04

ale nie je nahodou ticks pocet krokov a nie pocet mikrosekund?
za jednu mikrosekundu vie urobit aj viac ticks.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2572
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Atmega4808 Uart

Príspevok od používateľa maskrtnik01 » 04 Máj 2020, 09:54

117kHz mi robí ten interrupt. Chcel by som tak 10k alebo 1k.
Systémové hodiny sú 8M, delička v CTRLA je /2. No a potom CCMP 4000 by mi malo dať 1kHz - neviem prečo to nesedí.
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2572
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Atmega4808 Uart

Príspevok od používateľa maskrtnik01 » 04 Máj 2020, 11:21

No niečo tu bude dosť zle. Aj keď zmením CCMP hodnotu na 400, alebo 40 000, frekvencia na výstupnom pine ostáva rovnaká.
Proste natvrdo 58kHz na pine (117kHz na prerušení).
0

Atlan
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1148
Dátum registrácie: 01 Feb 2008, 00:00
Bydlisko: Kosice okolie

Re: Atmega4808 Uart

Príspevok od používateľa Atlan » 04 Máj 2020, 12:13

A pri programovani si odklikol poistku divide8?
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2572
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Atmega4808 Uart

Príspevok od používateľa maskrtnik01 » 04 Máj 2020, 12:18

Ktorú poistku myslíte? Nenašiel som divide8, mám atmega4808. Oproti výrobným nastaveniam som iba prepol na 16MHz interný oscilátor.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Atmega4808 Uart

Príspevok od používateľa peterple » 04 Máj 2020, 18:30

No tak to už je ľahká detektívka. Tu je detektívny postup:
  1. Z tej frekvencie sa dá vypočítať čas ako často sa prerušuje a z toho koľko cyklov MCU nabehá. Vyšlo mi okolo 70. Toľko cyklov by mohla trvať samotná obsluha prerušenia. Naznačuje to teda že sa prerušuje stále.
  2. Opakované prerušovanie má zrejme na svedomí nesprávne obslúženie prerušenia. Tak si to treba tu prečítať
    http://ww1.microchip.com/downloads/en/D ... f#page=112
    Interrupt flags are not automatically cleared after the interrupt is executed. The respective INTFLAGS register
    descriptions provide information on how to clear specific flags.
    Takže príznak ktorý vyvolá prerušenie treba zhodiť programom, hw to sám neurobí.
  3. A už len zistiť ako sa ten príznak zhadzuje. Takže zase ten DS
    http://ww1.microchip.com/downloads/en/D ... f#page=248
    Bit 0 – CAPT Capture Interrupt Flag
    This bit is set when a capture interrupt occurs. The interrupt conditions are dependent on the Counter Mode
    (CNTMODE) bit field in the Control B (TCBn.CTRLB) register.
    This bit is cleared by writing a ‘1’ to it or when the Capture register is read in Capture mode.
  4. Aha jasné. Detektívka skončila. Takže je tomu celému na vine tento riadok v obsluhe prerušenia?

    Kód: Vybrať všetko

    TCB0_INTFLAGS = 0;
Celej detektívnej story hodne napomohlo že si poskytol aj info že na to nemala vplyv hodnota v porovnávacom registri. No a nakoniec ešte pochvala za to atomické čítanie premennej tick v hlavnom programe.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2572
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Atmega4808 Uart

Príspevok od používateľa maskrtnik01 » 04 Máj 2020, 19:59

Super ďakujem. Takže ďalšia periféria oživená. Teraz mám na pine podľa uni-t 0.4998kHz, to už je akceptovateľné.
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2572
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Atmega4808 Uart

Príspevok od používateľa maskrtnik01 » 06 Máj 2020, 13:20

Pokračujem ďalej, a samozrejme ďalšie problémy. Tentokrát externý ADC MAX11254 na SPI rozhraní nereaguje. Najlepšie by mi bolo odchytiť na LA komunikáciu, ale toľko šťastia na vybavenie nemám. Je v tomto kóde vidno nejakú chybu?

Kód: Vybrať všetko

void Spi_Init()
{
	SPI0_CTRLB = SPI_SSD_bm;
	SPI0_CTRLA = SPI_MASTER_bm | SPI_ENABLE_bm;
}
void Spi_Transmit(uint8_t csbline, uint8_t *data, uint8_t len)
{
	if(csbline)
		PORTC_OUTCLR = 0x80;
	else
		PORTC_OUTCLR = 0x40;
	for(uint8_t i = 0;i < len;i++,data++)
	{
		SPI0_DATA = *data;
		while(!(SPI0_INTFLAGS & SPI_IF_bm));		
		uint8_t dummy = SPI0_DATA;
	}
	if(csbline)
		PORTC_OUTSET = 0x80;
	else
		PORTC_OUTSET = 0x40;
}
void Spi_TransmitReceive(uint8_t csbline, uint8_t *data, uint8_t lentx, uint8_t lenrx)
{
	uint8_t *rxdata = data;
	if(csbline)
		PORTC_OUTCLR = 0x80;
	else
		PORTC_OUTCLR = 0x40;
	for(uint8_t i = 0;i < lentx;i++,data++)
	{
		SPI0_DATA = *data;
		while(!(SPI0_INTFLAGS & SPI_IF_bm));
		uint8_t dummy = SPI0_DATA;
	}
	for(uint8_t i = 0;i < lenrx;i++,rxdata++)
	{
		SPI0_DATA = 0;
		while(!(SPI0_INTFLAGS & SPI_IF_bm));
		*rxdata = SPI0_DATA;
	}
	if(csbline)
		PORTC_OUTSET = 0x80;
	else
		PORTC_OUTSET = 0x40;
}

Kód: Vybrať všetko

Adc_SetReg8(0,ADC_REG_CTRL1,ADC_CTRL1_UB_UNIPOLAR | ADC_CTRL1_SCYCLE);
	Adc_SetReg8(0,ADC_REG_CTRL2,ADC_CTRL2_EXTCLK | ADC_CTRL2_CSSEN | ADC_CTRL2_LDOEN | ADC_CTRL2_PGAEN | ADC_CTRL2_PGA_64);
	Adc_SetReg8(0,ADC_REG_CTRL3,ADC_CTRL3_SYNCMODE | ADC_CTRL3_NOSYSG | ADC_CTRL3_NOSYSO | ADC_CTRL3_NOSCG | ADC_CTRL3_NOSCO);
	Adc_SetReg8(0,ADC_REG_GPIOCTRL,0);
	Adc_SetReg24(0,ADC_REG_CHMAP0,((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_1) << ADC_CHMAP0_CH0_Pos) | ((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_2) << ADC_CHMAP0_CH1_Pos) | ((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_3) << ADC_CHMAP0_CH2_Pos));
	Adc_SetReg24(0,ADC_REG_CHMAP1,((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_4) << ADC_CHMAP1_CH3_Pos) | ((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_5) << ADC_CHMAP1_CH4_Pos));
	Adc_SetReg8(0,ADC_REG_SEQ,ADC_SEQ_MODE2);
	Adc_SetReg8(1,ADC_REG_CTRL1,ADC_CTRL1_UB_UNIPOLAR | ADC_CTRL1_SCYCLE);
	Adc_SetReg8(1,ADC_REG_CTRL2,ADC_CTRL2_EXTCLK | ADC_CTRL2_CSSEN | ADC_CTRL2_LDOEN | ADC_CTRL2_PGAEN | ADC_CTRL2_PGA_64);
	Adc_SetReg8(1,ADC_REG_CTRL3,ADC_CTRL3_SYNCMODE | ADC_CTRL3_NOSYSG | ADC_CTRL3_NOSYSO | ADC_CTRL3_NOSCG | ADC_CTRL3_NOSCO);
	Adc_SetReg8(1,ADC_REG_GPIOCTRL,0);
	Adc_SetReg24(1,ADC_REG_CHMAP0,((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_1) << ADC_CHMAP0_CH0_Pos) | ((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_2) << ADC_CHMAP0_CH1_Pos) | ((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_3) << ADC_CHMAP0_CH2_Pos));
	Adc_SetReg24(1,ADC_REG_CHMAP1,((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_4) << ADC_CHMAP1_CH3_Pos) | ((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_5) << ADC_CHMAP1_CH4_Pos));
	Adc_SetReg8(1,ADC_REG_SEQ,ADC_SEQ_MODE2);
Prílohy
MAX11254.pdf
(1.15 MiB) 61 stiahnutí
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Atmega4808 Uart

Príspevok od používateľa peterple » 06 Máj 2020, 23:34

V kóde moc chybu ani nevidím, ale ani som v ňom moc nesnoril. Podľa prvého príspevku máš k dispozícii dvojkanálový osciloskop, tak v čom je problém spraviť pár meračiek? Na jednom hodiny na druhom MOSI, potom MISO. A aký je problém kúpiť LA za 10€?
Len tak od boku. Máš to typujem postavené na kontaktnom poli alebo univerzálke. Potom si myslím že 2MHz CLK je pomerne dosť. Môže to robiť neplechu. Znížil by som CLK a zmeral priebehy. Naslepo sa dosť zle hladá chyba.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2572
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Atmega4808 Uart

Príspevok od používateľa maskrtnik01 » 07 Máj 2020, 08:11

Keby jeden bajt, tak nie je problém. Celý config to už je horšie. Ani nemám na tom mcu reset, chcel som ho povoliť v poistkách, ale bolo tam varovanie že nie všetky updi programátory budú fungovať. LA, no ešte počkám či do leta otvoria labáky na TUKE.

Je to na dps, atmelka je v tqfp32. Priebehy nie sú úplne kolmé, ale prečítať som ich vedel ľahko. Frekvencia bol by som rád ak by sa dalo na 2MHz, pri 64ksps je to na hrane, menej by nestačilo.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Atmega4808 Uart

Príspevok od používateľa peterple » 09 Máj 2020, 21:37

žiadny posun? Nechápem načo čakať a tiež nechápem čo je problém z resetom. Máš rozbehanú sériovú komunikáciu. Takže už sa dá logovať na terminál a tak sa dá hravo vypísať čo sa práve deje stým SPI. Čo sa poslalo čo prišlo. Vzorkovanie sa dá robiť napr každú sekundu, alebo na nejaké písmeno prijaté z terminálu. Dá sa vo vhodnom okamihu nahodiť nejaký bit a pomocou neho trigrovať ten dvojkanál čo máš. Ak sa nedá tak spúšťaj jedným kanálom. Overiť aj presnos jedneho byte má cenu. Minimálne takú, že sa kontroluje či je to podľa DS toho prevodníka. Ale prečo by nenabral aj dlhší úsek veď snáď to má nejakú časovú lupu. No ak tie nízkoúrovňové veci pôjdu dobre. Tak potom už stačí logovanie na terminál. Ja som moje prvé SPI rozbehával s BM566 a zoom som robil Bčkovou časovou základňou. Už si nepamätám ale tuším to dokázalo roztiahnuť signál až 1000krát.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok