Elektroniikkafoorumin päävalikko Elektroniikkafoorumi
Keskustelufoorumi elektroniikkaharrastajille
 
 OhjeOhje   HakuHaku   KäyttäjälistaKäyttäjälista   KäyttäjäryhmätKäyttäjäryhmät   RekisteröidyRekisteröidy 
 Omat asetuksetOmat asetukset   Kirjaudu sisään tarkistaaksesi yksityiset viestitKirjaudu sisään tarkistaaksesi yksityiset viestit   Kirjaudu sisäänKirjaudu sisään 

atmega32 ajotietokoneeksi (projekti google.code)
Siirry sivulle Edellinen  1, 2
 
Lähetä uusi viesti   Vastaa viestiin    Elektroniikkafoorumin päävalikko -> Mikrokontrollerit ja ohjelmointi
Näytä edellinen aihe :: Näytä seuraava aihe  
Kirjoittaja Viesti
StiNgeR
Vanhempi jäsen
Vanhempi jäsen


Liittynyt: 29 Tam 2007
Viestejä: 332
Paikkakunta: Tuusula

LähetäLähetetty: Ma Maa 01, 2010 14:25    Viestin aihe: Vastaa lainaamalla viestiä

Noiden fusejen määrittely riippuu siitä millä ohjelmoi ohjelman kontrolleriin. Itse teen koodin ja käännän avrstudiolla mutta itse heksafileen paistan piirille ponyprogilla, jossa siis erikseen määritellään nuo fuse-bitit.

En ole ikinä mistään avrstudion asetuksista fuseja asetellut koska omalle ohjelmointikaapelille ei ole tukea avrstudiossa. Jos oma ohjelmointilaitteesi toimii suoraan avrstudion kautta, ne fuse-bititkin ilmeisesti asetellaan sieltä.

Erittäin yleinen ongelma on ollut juurikin kellofuset, useimmat luulevat että esimerkiksi koodissa oleva F_OSC=4000000UL -rivi riittää asettamaan kellotaajuuden 4MHz ja sitten ihmetellään kun ajastukset eivät toimi.
Takaisin alkuun
Näytä käyttäjän tiedot Lähetä yksityinen viesti
Lassivv
Kokelas
Kokelas


Liittynyt: 27 Hel 2010
Viestejä: 8

LähetäLähetetty: Ma Maa 01, 2010 14:39    Viestin aihe: Vastaa lainaamalla viestiä

Juuh niin muistelinkin hämärästi, että tuosta ohjelmasta millä ohjelma siirretään avr:lle asetellaan myös fuset. Tuollaista välilehteä on tullu ite räpellettyä pelkästään kyllä tuon frecuencyn puitteissa, muitten oon antanu olla noin kun ovat. Johon siis kirjoitettu 16000000hz

Jaahas väärällä sivulla olin fusejen perässä Smile Noh fuses välilehti löyty nyt ainakin.
---------------------------------------------------------

Itse itselleni vastaten, näyttää tuolta AVR programming alta löytyvän nuo. Ei oo tässä töissä tota ohjelmaa, eikä oikein tauon puitteissa kerkee alkaa asentelemaankaan, niin täytyy noihin vanhoihin screenshotteihin turvautuu mitä sattuu tääl oleen Smile

http://i5.aijaa.com/b/00718/5829760.png

Tuolla ylärivillä näyttäs olevan välisivu "fuses" sieltä varmaankin saa vaihdeltua kaiken tarpeellisen Smile Onkohan siellä jotain arvoja mitkä kannattaa heti tarkistaa, mitkä vois aiheuttaa tuota sekoilua ton näytön toimimattomuudessa? Ilmeisesti ainakin tuo prosessorin omaan kiteen 16mhz valinta. Onko vielä jotain muita tärkeitä?
Takaisin alkuun
Näytä käyttäjän tiedot Lähetä yksityinen viesti
L18
Jäsen
Jäsen


Liittynyt: 06 Maa 2009
Viestejä: 85

LähetäLähetetty: Ma Maa 01, 2010 15:46    Viestin aihe: Vastaa lainaamalla viestiä

Yks juttu tossa ohjelmassa muuten ihmetytti, saattaa olla ihan normaaliakin, kun en AVR:n sielunelämään kovin paljon ole kyllä perehtynyt. Eli main -funktiossa ei ole kuin kutsu tuohon ioinit -funktioon, mutta sen jälkeen tulee heti return 0? Mitäs AVR tekee tuossa tapauksessa?
Takaisin alkuun
Näytä käyttäjän tiedot Lähetä yksityinen viesti
JKN
Vanhempi jäsen
Vanhempi jäsen


Liittynyt: 14 Tam 2007
Viestejä: 377
Paikkakunta: Helsinki

LähetäLähetetty: Ma Maa 01, 2010 23:13    Viestin aihe: Vastaa lainaamalla viestiä

L18 kirjoitti:
Eli main -funktiossa ei ole kuin kutsu tuohon ioinit -funktioon, mutta sen jälkeen tulee heti return 0? Mitäs AVR tekee tuossa tapauksessa?

Tämä ei ole kontrollerin vaan kääntäjän ominaisuus. En tunne AVR:n kääntäjää tarkemmin, mutta ainakin SDCC tuottaa main-funktiossa olevasta return-lauseesta ikuisen loopin, siis jotain:

loop1: JMP loop1

Oletan, että AVR:n kääntäjä toimii samoin. Tämän voi tarkistaa ottamalla kääntäjän tuottaman assemblylistauksen ulos. Tässä tapauksessa tuo on ihan ok ratkaisu, kun kaikki tekeminen on keskeytyspalveluissa.

Lainaus:
Mahtaisko kellään olla intoa suunnitella/tehdä joku luuranko systeemi missä mittaus ja tarkkuus oltas saatu mahdollisimman hyvää balanssiin näillä osilla

Tuo rakenne olisi aika helppo korjata: kaikki mittauksia ja tulostuksia suorittava koodi pois keskeytyspalvelusta ja omaksi funktiokseen. Keskeytyspalveluun vain ajan laskenta ja flagi, jonka palvelu asettaa sekunnin välein. Pääohjelmaan ikuinen looppi, joka odottaa flagin asettumista ja kutsuu em. funktiota, jossa tehdään mittaukset ja tulostukset. Näin toiminnallisuus pysyy samana, mutta keskeytyksiä ei hukata, jolloin mittaukset ja tulostukset suoritetaan tarkasti sekunnin välein. Eikä koodi ole enää kriittinen sille, kestääkö mittausten ja tulostusten suorittaminen kauemman kuin keskeytysväli.
Takaisin alkuun
Näytä käyttäjän tiedot Lähetä yksityinen viesti
Lassivv
Kokelas
Kokelas


Liittynyt: 27 Hel 2010
Viestejä: 8

LähetäLähetetty: Su Maa 07, 2010 15:01    Viestin aihe: Vastaa lainaamalla viestiä

JKN kirjoitti:
Lassivv kirjoitti:

http://koti.kapsi.fi/~lassivv/hd44780.c

Tälläisellä sitä siis koitettiin, mahtaako tuolla oikein rakenneltu?

Ohjelman toiminta näkyy pyörivän täysin sen varassa, että INT0-keskeytyspalvelussa käydään riittävän tiheän tahtiin (32768 kertaa sekunnissa). DS1307:n hommana on generoida tätä taajuutta INT0:aan. Jos on oskilloskooppi käytettävissä, kannattaa varmistaa, että kontrollerin nastassa 16 näkyy 32.768 kHz kanttiaalto. Jos ei ole, niin debuggerilla voisi varmistaa, että keskeytyspalvelussa yleensäkin käydään.

Nuo viiveiden omituisuudet saattavat johtua vain siitä, että ms-viiveellä ei pysty tekemään noin pitkiä viiveitä (20 s), joku laskuri vuotaa yli ja lyhentää viiivettä tavoitellusta. Riippuu viivekirjaston sisäisestä toteutuksesta, en tunne sitä tarkemmin.

Yleensä tuollaista, että kaikki asiat tehdään keskeytyspalvelussa, pidetään huonona ohjelmointityylinä. Tuon toimivuus epäilyttää, koska palvelussa suoritetaan useita printf-lauseita ja kuitenkaan keskeytyspalvelu ei saisi kestää yli 300 us, muuten hukataan keskeytyksiä. Tuo ei voi toimia oikein. Mutta tuo hölmöily ei kylläkään aiheuta noita havaitsemiasi ongelmia, se tuottaa ainoastaan virheellisiä tuloksia.


Noniin nyt saatu vihdoin testailtua noita, oskilloskoopin mukaan int0 nastaan tulee oikeaa kanttiaaltoa.

Viiveitä koitin muuttaa, muutin kaikki delayt tuplasti pitemmäksi lcd:hen liittyen, mutta silti ei näyttö alkanu pelaan. Näytölle saatu muutaman kerran tekstit näkyviin, mutta sekään ei onnistu kun vanhalla resetin rämppäyksellä ja kellotaajuudeksi pitää olla säädetty 4mhz (16mhz kide).

Pitääköhän jotain fuseja tms. muuttaa kun on vaihdettu ennen 4mhz kiteellä olevalle mega32:lle --> 16mhz kide. Makefile välilehteen toki vaihdettu 16000000hz vanhan 4:n tilalle?

------------------------------------------------------------------------

Tälläinen pätkä tuolta hd44780.c iski silmään:
Koodi:
  /*
   * Guarantee at least 500 ns of pulse width.  For high CPU
   * frequencies, a delay loop is used.  For lower frequencies, NOPs
   * are used, and at or below 1 MHz, the native pulse width will
   * already be 1 us or more so no additional delays are needed.
   */
#if F_CPU > 4000000UL
  _delay_us(0.5);
#else
  /*
   * When reading back, we need one additional NOP, as the value read
   * back from the input pin is sampled close to the beginning of a
   * CPU clock cycle, while the previous edge on the output pin is
   * generated towards the end of a CPU clock cycle.
   */
  if (readback)
    __asm__ volatile("nop");
#  if F_CPU > 1000000UL
  __asm__ volatile("nop");
#    if F_CPU > 2000000UL
  __asm__ volatile("nop");
  __asm__ volatile("nop");
#    endif /* F_CPU > 2000000UL */
#  endif /* F_CPU > 1000000UL */
#endif


Mahtaako tuolla olla mitään merkitystä koodin toiminnan kannalta, ainakin jos makefileen määrittää 4mhz niin näyttöön saa tietyllä resetin naksuttelulla oikean "käyttöliittymän", mutta sekään ei pikasella testillä reagoinu esim. nopeus signaalin nastan +5v pulsseihin.

Fuse välilehdellä ei tuntunu olevan mitään kellotaajuuteen viittavaa: http://img532.imageshack.us/img532/3253/fusesg.png

Melkosen erikoiselta alkaa jo vaikuttamaan, kun millään saa edes näytön tekstejä näkymään, vaikka ne kuitenkin resetillä kikkaillen saa näkyviin Smile
Takaisin alkuun
Näytä käyttäjän tiedot Lähetä yksityinen viesti
StiNgeR
Vanhempi jäsen
Vanhempi jäsen


Liittynyt: 29 Tam 2007
Viestejä: 332
Paikkakunta: Tuusula

LähetäLähetetty: Su Maa 07, 2010 15:34    Viestin aihe: Vastaa lainaamalla viestiä

SUT_CKSEL vaikuttaa ainakin kelloihin. Siitähän ilmeisesti voi dropdown-valikosta valita sille eri arvoja.

Jotenkin vähän sekavalta mun silmään näyttää tuo fuses-välilehti, itse olen oppinut PonyProgin fuse-dialogin. Jotkut taas sanovat PonyProgin fuse-valintoja hankalaksi.
Takaisin alkuun
Näytä käyttäjän tiedot Lähetä yksityinen viesti
L18
Jäsen
Jäsen


Liittynyt: 06 Maa 2009
Viestejä: 85

LähetäLähetetty: Ti Maa 09, 2010 22:32    Viestin aihe: Vastaa lainaamalla viestiä

Koodi:
hd44780_init(void)
{

  HD44780_DDR = _BV(HD44780_RS) | _BV(HD44780_RW) | _BV(HD44780_E)
    | HD44780_DATABITS;

  _delay_ms(15);      /* 40 ms needed for Vcc = 2.7 V */
  hd44780_outnibble(HD44780_FNSET(1, 0, 0) >> 4, 0);
  _delay_ms(4.1);
  hd44780_outnibble(HD44780_FNSET(1, 0, 0) >> 4, 0);
  _delay_ms(0.1);
  hd44780_outnibble(HD44780_FNSET(1, 0, 0) >> 4, 0);
  hd44780_wait_ready();

Tossa LCD initissä on muuten noi viiveet just sen minimin mikä HD44780 datasheetissä mainitaan, että ehkä kannattaa muuttaa nuo varmuuden vuoksi esim.
Koodi:

hd44780_init(void)
{

  HD44780_DDR = _BV(HD44780_RS) | _BV(HD44780_RW) | _BV(HD44780_E)
    | HD44780_DATABITS;

  _delay_ms(20);      /* 40 ms needed for Vcc = 2.7 V */
  hd44780_outnibble(HD44780_FNSET(1, 0, 0) >> 4, 0);
  _delay_ms(5);
  hd44780_outnibble(HD44780_FNSET(1, 0, 0) >> 4, 0);
  _delay_ms(0.2);
  hd44780_outnibble(HD44780_FNSET(1, 0, 0) >> 4, 0);
  hd44780_wait_ready();
Takaisin alkuun
Näytä käyttäjän tiedot Lähetä yksityinen viesti
Näytä edelliset viestit:   
Lähetä uusi viesti   Vastaa viestiin    Elektroniikkafoorumin päävalikko -> Mikrokontrollerit ja ohjelmointi Kaikki ajat ovat GMT + 3 tuntia
Siirry sivulle Edellinen  1, 2
Sivu 2 Yht. 2

 
Siirry:  
Et voi kirjoittaa uusia viestejä tässä foorumissa
Et voi vastata viesteihin tässä foorumissa
Et voi muokata viestejäsi tässä foorumissa
Et voi poistaa viestejäsi tässä foorumissa
Et voi äänestää tässä foorumissa


Powered by phpBB © 2001, 2005 phpBB Group
Käännös Jorma Aaltonen,
Päivittänyt, Lurttinen www.phpbbsuomi.com