Go Down

Topic: Oh kom er eens kijken wat ik in mijn shoentje vind (Read 373 times) previous topic - next topic

sterretje

Dec 07, 2018, 06:33 pm Last Edit: Dec 07, 2018, 06:44 pm by sterretje
Vanochtend afgeleverd



En meteen even spelen met een leonardo
Code: [Select]
void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
  digitalWrite(LED_BUILTIN, LOW);
  digitalWrite(LED_BUILTIN, HIGH);
}

En het resultaat



Hmmm, waar komen die onregelmatigheden vandaan, Is dat ding nu al stuk? Foutje in the pulseview software?

Oh wacht, misschien wel interrupts. Een cli() toegevoegd in setup() en het probleem verdween als sneeuw voor de zon; ik het niet uitgezocht welke interrupts het waren.

Verder spelen, laten we eens zien hoe snel we een poort aan en uit kunnen schakelen. Op een leonardo zit pin 13 op portC.
Code: [Select]
void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
  PORTC |= 0x80;
  PORTC &= 0x7F;
}

En het resultaat



Hmmm, asymetrisch, Wat is daar nu weer aan de hand? De pulsen zijn 125ns hoog en 375ns laag. Ik heb het niet verder uitgezocht; zeer waarschijnlijk de call en return van loop().

En dan de laatste
Code: [Select]
void setup()
{
  Serial1.begin(57600);
}

void loop()
{
  delay(2000);
  Serial1.print("Sinterklaas kapoentje");
}

Een het resultaat



Deze kostte me wat tijd omdat de eerste bytes niet lekker waren. De oplossing was om een kleine pre-capture trigger ratio in te stellen in pulseview. Als je sigrok,4.jpg hieronder opent zul je zien dat de uart output inderdaad 'sinterklaas kapoentje' geeft.

PS
openen van enige plaatje hieronder geeft een grotere versie.

If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

shooter

leuk ding zeg, en ik maar klooien met mijn 200 kg scoop met een opwarmtijd van een half uur.hihi
en ja de timing zal je nog wel vaker parten spelen, want jouw programma in machinetaal ziet er toch wel anders als verwacht uit hoor.

paul deelen
shooter@home.nl
making controls with codesys PLC and arduino

sterretje

leuk ding zeg, en ik maar klooien met mijn 200 kg scoop met een opwarmtijd van een half uur.hihi
Ik ken het gevoel :D


en ja de timing zal je nog wel vaker parten spelen, want jouw programma in machinetaal ziet er toch wel anders als verwacht uit hoor.
Ik weet het. Ik was van plan om zelf een simpele logic analyzer te maken, gebaseerd op alleen een Leonardo. Lage spec, dacht ik (1MS/s max) en de eerste poging ging meteen goed de mist in. Ik gebruikte een timer en het begin van de ISR zier er zo uit
Code: [Select]
ISR (TIMER1_COMPA_vect)
{
 524: 1f 92        push r1                                                  // 2 cycles
 526: 0f 92        push r0                                                  // 2 cycles
 528: 0f b6        in r0, 0x3f ; 63                                        // 1 cycle
 52a: 0f 92        push r0                                                  // 2 cycles
 52c: 11 24        eor r1, r1                                                  // 1 cycle
 52e: 8f 93        push r24                                                 // 2 cycles
 530: 9f 93        push r25                                                 // 2 cycles
 532: ef 93        push r30                                                 // 2 cycles
 534: ff 93        push r31                                                 // 2 cycles
 
                                                                                    // 16 cycles <<<

Ongeveer hetzelfde aan het eind van de ISR (pop). Het totaal kwam neer op ongeveer 80 cycles; keer 62.5 ns geeft 5 us en daar ging de spec :( En dat was met gebruik van direct lezen van de poort.
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.

Go Up