Atmega328P in SPI

programski jeziki in programiranje

Moderator: tilz0R

Atmega328P in SPI

OdgovorNapisal/-a MocnikG » 06 Mar 2017, 17:29

Zdravo,

kako je s temi mikrokontrolerji, ki se programirajo prek ISP, saj so v času programiranja zasedene linije za SPI (MOSI in MISO, SCK).
Je potrebno v programu ali v Fusebitih karkoli disablat?

Trenutno sem preizkusil program, ki je v datashetu od Atmege328P toda brez uspeha, zadevo spremljam na Logičnem analizatorju, nimam niti ure na SCK liniji.
Koda: Izberi vse
#ifndef F_CPU
#define F_CPU 4000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>

void SPI_MasterInit(void)
{
   /* Set MOSI and SCK output, all others input */
   DDRB = (1 << 3)|(1 << 5);
   //DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
   /* Enable SPI, Master, set clock rate fck/4 */
   SPCR = (1<<SPE)|(1<<MSTR)|(0<<SPR0);
}
void SPI_MasterTransmit(char cData)
{
   /* Start transmission */
   SPDR = cData;
   /* Wait for transmission complete */
   while(!(SPSR & (1<<SPIF)))
   ;
}

int main(void)
{
    /* Replace with your application code */
   SPI_MasterInit();
   
    while (1)
    {
      SPI_MasterTransmit('a');
      //_delay_us(500);
      
    }
}


Hvala za odgovore.
*Sent*from*my* iPhone.
*Sent*from*my* Linux.
*Sent*from*my* room.
Uporabniški avatar
MocnikG
 
Prispevkov: 487
Pridružen: 18 Maj 2015, 18:56
Kraj: Koroška - MB - CE
Zahvalil se je: 47 krat
Prejel zahvalo: 77 krat
Uporabnika povabil: s55ei
Število neizkoriščenih povabil: 7

Re: Atmega328P in SPI

OdgovorNapisal/-a MocnikG » 06 Mar 2017, 17:52

Odgovarjam sam sebi. :D
V času ko sem pisal post sem se spomnil, valda pa ja moram nastaviti SS pin, pred in po pošiljanju. Saj sem prebral v datasheetu.
Sem naredil tako, sedaj deluje.
Koda: Izberi vse
#ifndef F_CPU
#define F_CPU 4000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>

void SPI_MasterInit(void)
{
   
   
   //DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
   /* Enable SPI, Master, set clock rate fck/4 */
   SPCR = (1<<SPE)|(1<<MSTR)|(0<<SPR0);
}
void SPI_MasterTransmit(char cData)
{
   /* Start transmission */
   SPDR = cData;
   /* Wait for transmission complete */
   while(!(SPSR & (1<<SPIF)));
   
   
}

int main(void)
{
    /* Replace with your application code */
   /* Set MOSI and SCK output, all others input */
   DDRB = (1 << 2)|(1 << 3)|(1 << 5);
   DDRD = (1 << 6)|(1 << 7);
   
   SPI_MasterInit();
   
    while (1)
    {
      PORTB = (0 << 2);
      SPI_MasterTransmit(0xF);
      PORTB = (1 << 2);
      //_delay_us(500);
      /*
      PORTD = (1 << 6)|(1 << 7);
      _delay_ms(500);
      PORTD = (0 << 6)|(0 << 7);
      _delay_ms(500);*/
    }
}


Vendar me moti, to, da ne znam nastaviti Atmego, da se bo resetirala sam brez programatorja?
Ima kdo kašno idejo ?
*Sent*from*my* iPhone.
*Sent*from*my* Linux.
*Sent*from*my* room.
Uporabniški avatar
MocnikG
 
Prispevkov: 487
Pridružen: 18 Maj 2015, 18:56
Kraj: Koroška - MB - CE
Zahvalil se je: 47 krat
Prejel zahvalo: 77 krat
Uporabnika povabil: s55ei
Število neizkoriščenih povabil: 7

Re: Atmega328P in SPI

OdgovorNapisal/-a RaInfFiMa » 06 Mar 2017, 18:04

MocnikG je napisal/-a:Vendar me moti, to, da ne znam nastaviti Atmego, da se bo resetirala sam brez programatorja?
Ima kdo kašno idejo ?

Ne razumem vprašanja.
Sprogramiraš, odklopiš programator in daš napajanje. Kaj misliš s tem - resetirala brez programatorja?
Ma kaj se še ukvarjaš z njim.
Uporabniški avatar
RaInfFiMa
 
Prispevkov: 553
Pridružen: 26 Jan 2015, 13:19
Kraj: Sv. Marija na hribu (nad Koprom)
Zahvalil se je: 296 krat
Prejel zahvalo: 109 krat
Uporabnika povabil: forest70
Število neizkoriščenih povabil: 20

Re: Atmega328P in SPI

OdgovorNapisal/-a oobuco » 06 Mar 2017, 18:50

Morda si hotel vprašati kako naj aplikacija, ki ti deluje v tvojem mikrokontrolerju, ta mikrokontroler resetira - in to na pravilen način, kot da je Hard Reset.


Načeloma to narediš z Watchdog-om.

Nastaviš ga na željeni čas, vklopiš, startaš, načeloma izklopiš vse prekinitve in potem narediš neskončno zanko in Watchdog bo resetiral mikrokontoler v nastavljenem času.
Pred EUR sem bil SIT! (sposojeno z grafita)
Uporabniški avatar
oobuco
 
Prispevkov: 56
Pridružen: 19 Jan 2015, 15:05
Kraj: Šentvid pri Stični
Zahvalil se je: 23 krat
Prejel zahvalo: 17 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 6

Re: Atmega328P in SPI

OdgovorNapisal/-a arksi » 06 Mar 2017, 21:59

RaInfFiMa je napisal/-a:
MocnikG je napisal/-a:Vendar me moti, to, da ne znam nastaviti Atmego, da se bo resetirala sam brez programatorja?
Ima kdo kašno idejo ?

Ne razumem vprašanja.
Sprogramiraš, odklopiš programator in daš napajanje. Kaj misliš s tem - resetirala brez programatorja?


Hmm, tudi jaz se to spršujem. Tako je - speogramiraš in odklopiš. V SPI priključku je tudi reset in, ko potrdiš "programming chip" ti programator sam naredi reset procesorja. Je pa "zdravo", da SPI pini (MOSI in MISO, SCK, RESET)niso priključeni na kakšen zunanji porabnik. Če so, zna to delti probleme....
arksi
 
Prispevkov: 599
Pridružen: 21 Jan 2015, 08:01
Kraj: Dolenjska
Zahvalil se je: 837 krat
Prejel zahvalo: 111 krat
Uporabnika povabil: gumby
Število neizkoriščenih povabil: 14

Re: Atmega328P in SPI

OdgovorNapisal/-a MocnikG » 08 Mar 2017, 13:59

Ko Atmego sprogramiram, moram za delovanje še vedno pustiti priklopljen programator. Če vezje ugasnem, odklopim programator ter vezje nazaj prižgem, se ne odziva, oz. je tako kot ga ne bi resetiral.
Zanimivo je to, da pri identičnem vezju, ki ga uporabljam z Atmego328P v SMD ohišju deluje, če pa zadevo sestavim na protoboardu v THT pa mi ne deluje.

Dodano: Na SPI ta čas ni priklopljena nobena naprava, samo LED, ki je z Anodo obrnjena proti pinu na Atmegi za LED upor vezan na maso. Reset linija je z 10k uporom vezana na napajanje. Okrog napajalnih linij je keramika. Na AVCC je špula 10uH vezana proti VCC in kondi 100nF proti masi (LC člen).
*Sent*from*my* iPhone.
*Sent*from*my* Linux.
*Sent*from*my* room.
Uporabniški avatar
MocnikG
 
Prispevkov: 487
Pridružen: 18 Maj 2015, 18:56
Kraj: Koroška - MB - CE
Zahvalil se je: 47 krat
Prejel zahvalo: 77 krat
Uporabnika povabil: s55ei
Število neizkoriščenih povabil: 7

Re: Atmega328P in SPI

OdgovorNapisal/-a gumby » 08 Mar 2017, 14:28

Imaš kak bootloader mogoče in se po resetu ta aktivira?
Reset pin je normalno zvezan?
my brain hurts
Uporabniški avatar
gumby
 
Prispevkov: 2537
Pridružen: 14 Jan 2015, 19:49
Kraj: Lendava
Zahvalil se je: 107 krat
Prejel zahvalo: 593 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 64

Re: Atmega328P in SPI

OdgovorNapisal/-a MocnikG » 08 Mar 2017, 14:42

Na Atmegi je samo program, ki ga vidite zgoraj, brez bootloaderja.

Reset pin je vezan tako, kot je na tej shemi le, da ni tipke in napajanje je 3.3V
KLIK
*Sent*from*my* iPhone.
*Sent*from*my* Linux.
*Sent*from*my* room.
Uporabniški avatar
MocnikG
 
Prispevkov: 487
Pridružen: 18 Maj 2015, 18:56
Kraj: Koroška - MB - CE
Zahvalil se je: 47 krat
Prejel zahvalo: 77 krat
Uporabnika povabil: s55ei
Število neizkoriščenih povabil: 7

Re: Atmega328P in SPI

OdgovorNapisal/-a oobuco » 08 Mar 2017, 14:46

Kakšno napajanje pa imaš, ko ni priklopljen programator, napetost mislim.

Da nimaš morda prehitrega clocka glede na napetost.

Kar se tiče reset pina, če ne gre kakšna povezava prav daleč od pina, ne rabiš nič, ker mikrokontroler naredi svoj PowerOn reset in pina reset v ta namen ne rabi.
Pred EUR sem bil SIT! (sposojeno z grafita)
Uporabniški avatar
oobuco
 
Prispevkov: 56
Pridružen: 19 Jan 2015, 15:05
Kraj: Šentvid pri Stični
Zahvalil se je: 23 krat
Prejel zahvalo: 17 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 6

Re: Atmega328P in SPI

OdgovorNapisal/-a MocnikG » 08 Mar 2017, 14:49

Bil je 4Mhz kvarc potem pa sem zamenjal z 1.xxxx MHz kvarcem, pa je enako.
To za enkrat ni toliko pomembno ker se itak seli aplikacija na SMD vezje kjer to pač deluje, toda me je pač zanimalo če je kakšna fora.
*Sent*from*my* iPhone.
*Sent*from*my* Linux.
*Sent*from*my* room.
Uporabniški avatar
MocnikG
 
Prispevkov: 487
Pridružen: 18 Maj 2015, 18:56
Kraj: Koroška - MB - CE
Zahvalil se je: 47 krat
Prejel zahvalo: 77 krat
Uporabnika povabil: s55ei
Število neizkoriščenih povabil: 7

Re: Atmega328P in SPI

OdgovorNapisal/-a oobuco » 08 Mar 2017, 14:53

Jaz bi za probo še ukinil vse okoli reset pina.
Pred EUR sem bil SIT! (sposojeno z grafita)
Uporabniški avatar
oobuco
 
Prispevkov: 56
Pridružen: 19 Jan 2015, 15:05
Kraj: Šentvid pri Stični
Zahvalil se je: 23 krat
Prejel zahvalo: 17 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 6

Re: Atmega328P in SPI

OdgovorNapisal/-a Protoncek » 08 Mar 2017, 22:01

Za foro poskusi dvignit napajanje na 5V. Meni se je ravno na 328 DIP verziji dogajalo, da na 3.3V ni hotela delati, čeprav bi po datasheet-u morala...
Uporabniški avatar
Protoncek
 
Prispevkov: 3742
Pridružen: 17 Jan 2015, 21:41
Kraj: Mengeš
Zahvalil se je: 365 krat
Prejel zahvalo: 441 krat
Uporabnika povabil: VolkD
Število neizkoriščenih povabil: 93


Vrni se na Software

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 3 gostov