Verifiera om kristall svänger eller ej

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Verifiera om kristall svänger eller ej

Inlägg av Magnus_K »

Icecap skrev:
  • - Är det ett färdigt mönsterkort som används eller experimentkort eller labplatta? Det är mitt egna kort. MCU-pinnar och kristall är inom en diameter av 8mm. Se bild nedan.
    - Du skriver att du har gjort ett programsnudd som toggler en pinne - har du verifierat att hastigheten på denna toggling är stabil? Inget synligt jitter och verifierade bara att den viftade
    - Motsvarar hastigheten på togglingen ung. vad som kan förväntas? Kollade inte det här heller. Tog bara (dumt nog) för givet att viftar pinnen så snurrar processorn i alla fall.
Klas-Kenny skrev:
  • -Visa hur du har ställt dina fuses, så är det lättare att avgöra ifall något där är fel trots allt. Jag ställde Arduino IDE:et med verbose kompileringsinformation. Se kod-klipp nedan. Ställt in IDE:t till 3V 8MHz extern oscillator. Önskar det fanns ett sätt att sätta fusarna i koden, så man verkligen vet vad det blir.
Marta skrev:
  • - Är det Ditt runda kort Du har i en annan tråd? Japp, börjar bli debugging-rekord just nu...
    - Har Du kontrollerat att där inte är kortis mot jord eller tvärs över kristallen? Kollat efter kortis och även resistans mellan alla punkter. Allt det verkar tyvärr ok.
    - Prova med att hålla en annan kristall tvärs över. Testa med några olika frekvenser. Kristaller är hyfsat lätta att destruera så den kan mycket väl vara sönder. Har bytt kristall en gång av just denna anledning. Finns dock ingen anledning att tro att denna överlevt min "milda" behandling med varmluften heller.
    - Är Du säker på att kristallens lödningar är OK? SMD med dolda pads är luriga saker. Väldigt många av lödningarna som syns där är inte OK, gäller mer än de Du påpekat. Jag gjorde medvetet pads:en lite större för att kunna nå dom med både pennan och multimetern. Har lött om/bytt ut näst intill varje komponent i nuläget. Tycker det ser ut som att lödningarna håller nu i alla fall.
Ursäkta alla flussrester...
20191009_145617.jpg
Använder en Arduino Nano som programmerare.

Kod: Markera allt

Sketch uses 8190 bytes (26%) of program storage space. Maximum is 30720 bytes.
Global variables use 694 bytes (33%) of dynamic memory, leaving 1354 bytes for local variables. Maximum is 2048 bytes.
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM5 -b19200 -Uflash:w:C:\Users\Admin\AppData\Local\Temp\arduino_build_509931/atmega328_and_acc_spi.ino.hex:i 

avrdude: Version 6.3-20171130
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM5
         Using Programmer              : arduino
         Overriding Baud Rate          : 19200
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : Arduino
         Description     : Arduino
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% -0.00s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "C:\Users\Admin\AppData\Local\Temp\arduino_build_509931/atmega328_and_acc_spi.ino.hex"
avrdude: writing flash (8190 bytes):

Writing | ################################################## | 100% 13.50s

avrdude: 8190 bytes of flash written
avrdude: verifying flash memory against C:\Users\Admin\AppData\Local\Temp\arduino_build_509931/atmega328_and_acc_spi.ino.hex:
avrdude: load data flash data from input file C:\Users\Admin\AppData\Local\Temp\arduino_build_509931/atmega328_and_acc_spi.ino.hex:
avrdude: input file C:\Users\Admin\AppData\Local\Temp\arduino_build_509931/atmega328_and_acc_spi.ino.hex contains 8190 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 7.36s

avrdude: verifying ...
avrdude: 8190 bytes of flash verified

avrdude done.  Thank you.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Castor
Inlägg: 1989
Blev medlem: 24 mars 2012, 13:03:49

Re: Verifiera om kristall svänger eller ej

Inlägg av Castor »

Kan du ladda ner något enkelt program som togglar en pinne för att se vilken frekvens processorn kör på, något slags default intern osc?
Som någon tidigare skrev är denna toggling stabil eller fladdrar den, går det att läsa de fusar som finns och mata ut på seriekanalen som tydligen fungerar (autobaud?) Kan du läsa och mata ut något som har med xtal att göra, några register eller så, går det att läsa och mata ut någon baudrate- generator så kanske du kan räkna fram xtal-freq. Jag kan inget om denna processor, men kanske några ideer kan hjälpa.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Verifiera om kristall svänger eller ej

Inlägg av snigelen »

Om du kan programmera den med ISP har MCU'n i alla fall någon klocka, annars skulle det inte gå. Du skulle behöva läsa ut LFUSE för att verifiera vilken klockinställning du har.

Du borde se värdet om du kör

Kod: Markera allt

"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude" -C "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega328p -carduino -PCOM5 -b19200
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6953
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Verifiera om kristall svänger eller ej

Inlägg av Marta »

Det här finns på sidan 651 i databladet över Din MCU där dess "special features" finns beskrivna:

Errata ATmega328

The revision letter in this section refers to the revision of the ATmega328 device.

40.7.1 Rev K

Full swing crystal oscillator not supported
1. Full swing crystal oscillator not supported.
The full swing crystal oscillator functionality
is not available in revision K.

Problem fix/workaround
Use alternative clock sources available in the device.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Verifiera om kristall svänger eller ej

Inlägg av snigelen »

ATMega328 är inte samma som ATMega328P.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Verifiera om kristall svänger eller ej

Inlägg av Magnus_K »

@Castor: Mmm, misstänker att det är till att gå tillbaka till 0 igen och börja från början. Ska ladda ner det första programmet som enbart togglar en pinne i en loop, och får se vad det kan ge mig i frekvens.
När jag höll på med PIC så kunde jag få fram assembly-koden och på så sätt räkna ut antal instruktion- och klock-cykler för att uträtta togglingen, men tror inte jag kan det i Arduino-miljön.

@snigelen: Det där låter jätteintressant! Hur "kör" jag just det kommandot från Arduino-miljön? Eller kan man komma åt avr-dude från kommandotolken eller så och köra därifrån?
Är tyvärr inte så bevandrad i AVR:er, men än just genom Arduino-miljön.

@Marta: Njo, detta är 328P men ser att det står samma på den. Nu gäller det bara att bekräfta om det är en "full swing oscillator" jag köpt. Den här är det.
Sen sitter det ju en kristall på varenda Arduino jag sett, med just 328:an...
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6953
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Verifiera om kristall svänger eller ej

Inlägg av Marta »

Oscillator mode väljs i ett configregister. Det finns även en low power mode som väl skall vara OK.

Ber om ursäkt ifall mitt inlagg var bullsh*t. Har inga större erfarenheter av AVR och den där sista bokstaven brukar bara handla om temperaturområde o,dyl. Revisionen får antagligen läsas ur från chipet, så är det för PIC i varje fall.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Verifiera om kristall svänger eller ej

Inlägg av snigelen »

Du borde kunna köra det från kommandotolken, jag kopierade det bara från det Arduino körde i ditt förra inlägg och tog bort själva flash-delen.

Sen är det inte en oscillator du köpt utan en kristall som tillsammans med interna oscillator-kretsar i AVR'en genererar klockan. Konfigurerar du den som "Full-swing" så ger den just det på ena XTAL-pinnen så att du kan använda klockan till annat (t.ex mäta den). Alternativet är "Low power oscillator" som inte ger full swing och inte är lämpligt att klocka fler kretsar med. Full-swing är väl att rekomendera som default med extern kristall.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Verifiera om kristall svänger eller ej

Inlägg av snigelen »

Marta: I det här fallet står det avslutande P:et för PicoPower. Det är i huvudsak uppdaterad teknik vid chip-tillverkningen så de flesta som fått ett P är ganska samma som de utan P om man bortser från strömförbrukning och eventuella bug-fixar. Men i några fall är det lite större skillnader, t.ex tillagda periferienheter. I vilket fall som helst så startar revisions-numreringen om och P-varianterna får nya datablad.

Än mer förvirrande är t.ex ATMega328PB som är en helt annan MCU än ATMega328(P), ganska pin-kompatibel dock.

Efter att Microchip köpte Atmel har det blivit andra nämngivnings-konvensioner på nya MCU:er.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Verifiera om kristall svänger eller ej

Inlägg av Magnus_K »

Ursäkta att jag hoppar lite men blev så lycklig. Lyckades med hjälp av kommandotolken läsa ut fusarna genom att köra:

Kod: Markera allt

C:\Program Files (x86)\Arduino\hardware\tools\avr\bin>avrdude -C "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -p m328p -c arduino -P COM
5 -b 19200 -U lfuse:r:-:i -v 
Fick då bland annat ut:

Kod: Markera allt

avrdude: safemode: lfuse reads as 62
avrdude: safemode: hfuse reads as D9
avrdude: safemode: efuse reads as FF
avrdude: safemode: Fuses OK (E:FF, H:D9, L:62)
Det är nu det ska avslöjas att jag inte alls påverkat några fuses. Antagligen behöver jag köra i en bootloader för det...

EDIT: Sen var jag lat och googlade upp en "fuse-kalkylator" :)
Genom att mata in ATmega328P så ser man ju direkt att detta är default-inställningar. Dvs intern oscillator 8Mhz och DIV by 8-biten satt :doh:
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Verifiera om kristall svänger eller ej

Inlägg av snigelen »

Japp, ser ut som default fuses. Intern 8MHz RC delad med 8.

Du skulle kunna köra samma kommando, men byta ut "-U"-biten till

Kod: Markera allt

-U lfuse:w:0xf7:m
för full swing med extern kristall och inte dela den med 8.

Se t.ex http://www.engbedded.com/fusecalc

Men. Observera. Om din kristall inte funkar så kommer du att "bricka" (svengelska för att gör till en tegelsten) din AVR. Men, det går att rädda genom att injicera en klocksignal på ena XTAL-pinnen (kommer inte ihåg vilken) när du återställer LFUSE.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Verifiera om kristall svänger eller ej

Inlägg av Magnus_K »

Häftigt... eller ja, det är ju nu vi får svar på om den svänger eller inte.
Jag provar och återkommer självklart med en svängande oscilloskopsbild.. :vissla:

Tack för hjälpen med kortkommandot!
Borre
Inlägg: 4572
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Verifiera om kristall svänger eller ej

Inlägg av Borre »

Ja sätt fuses med avrdude som snigelen skriver. Använder du sidan fuse-kalkylatorn (som för övrigt är ett utmärkt verktyg) får du tom färdiga argument till avrdude nere i högra hörnet på sidan.
Castor
Inlägg: 1989
Blev medlem: 24 mars 2012, 13:03:49

Re: Verifiera om kristall svänger eller ej

Inlägg av Castor »

När du Magnus kommit lite längre, kan du beskriva vad som var fel, hur du felsökte (även de misslyckade försöken) och sedan rättade till så det blev funkis, jag har aldrig jobbat med Arduino och bara lite med AVR och mycket med 8051 (bara ASM), men att få en liten "Wiki" kanske kan få mig att åtminstone testa lite, det räcker om det är klart om några år. :D
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: Verifiera om kristall svänger eller ej

Inlägg av Magnus_K »

Så här tror jag det hänger ihop Castor.
Som nybörjare med "Arduino" så köper man oftast ett färdigt kort. Det kan vara Mega, Nano, Micro, Uno - eller något av dom andra hundra :)
I det här fallet är det alltid en bootloader förprogrammerad som både sätter fusarna rätt (för respektive kort), samt medger programmering av AVR:en genom serie-snöret, och inte enbart genom ICSP.

Det jag gjorde nu var ett försök till ett eget AVR-kort, men ville använda mig samma AVR och kod som jag labbat med på bänken. Jag kommer aldrig någonsin kunna lära mig något annat än "Arduino-kod", så det får jag nöja mig med.
Väl ihoplött med extern kristall och allt, så trodde jag i min enfald att genom att bara för-välja (och få Arduino-miljön att tro att jag använder) ett likvärdigt kort, så kommer rätt fuse-bitar sättas när jag programmerar första gången.
Det här ar en rejäl lärdom över att det gör det inte. Nu är jag inte riktigt säker på vad just "avrdude" är för något men det verkar vara AVR's programmeringsverktyg som ligger i bakgrunden av Arduino-miljön.
Att denna gick så enkelt att köra "ren", från kommandotolken, hade jag inte en aning om. Men genom den kunde jag nu alltså sätta fuse-bitarna rätt.
Nu vet jag Xyzzy slår sig i pannan och undrar om jag är trög, för det är alltid såhär han programmerar när vi nördar ihop, men jag har aldrig fått ihop det :D

Det är min version, och den stämmer säkert inte till 100%. Men för hela friden så tycker jag du ska ge dig på Arduino-träsket. Skitkul och det finns precis hur mycket hjälp som helst :)
Nu kanske inte just jag är den bästa personen att ge just dig tips om sånt här, då jag vet lite vad du har för bakgrund, men ändå. Tveka aldrig på att skicka iväg ett PM eller fråga här om det är något du undrar!

För att runda av då.
Bad katterna vara tysta för det var nu det gällde. Körde kommandot:

Kod: Markera allt

C:\Program Files (x86)\Arduino\hardware\tools\avr\bin>avrdude -C "C:\Program Fil
es (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -p m328p -c arduino -P COM
5 -b 19200 -U lfuse:w:0xf7:m

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% -0.00s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: reading input file "0xf7"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xf7:
avrdude: load data lfuse data from input file 0xf7:
avrdude: input file 0xf7 contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% -0.00s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified

avrdude: safemode: Fuses OK (E:FF, H:D9, L:F7)

avrdude done.  Thank you.
Och gick på med skopet:
NewFile0.png
Inte allt för oväntat så hoppade det mest igång. AVR:en somnar som planerat, och vaknar efter ett interrupt. Viloströmmen är nu nere på ~780µA men ska bantas mer. Dock så börjar det vid det här laget bli dags att räkna över pull-down-strömmar och se som dom andra IC:arna är rätt konfigurerade.

Tack för hjälpen än en gång!
Summa summarum (och inte helt oväntat): Skit Bakom Spakarna!
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skriv svar