Tutorial Arduino programmieren,

Antworten
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Tutorial Arduino programmieren,

Beitrag von pluto »

Ich bin mir sicher es ligt am enabled Pin:

Code: Alles auswählen

 
void LiquidCrystal_I2C::expanderWrite(uint8_t _data){                                       
   Wire.beginTransmission(_Addr);
   printIIC((int)(_data) | _backlightval);
   Wire.endTransmission();   
}
 
void LiquidCrystal_I2C::pulseEnable(uint8_t _data){
   expanderWrite(_data | En);   // En high
   delayMicroseconds(1);      // enable pulse must be >450ns
 
   expanderWrite(_data & ~En);   // En low
   delayMicroseconds(50);      // commands need > 37us to settle
}
 

Das ist extrem Wichtig bei solchen LCD, sonst reagiert es nicht.... Problem ist auch das mit dem > 450 Nano Sekunden....
"data & ~En" Weiß jemand was das ~ hier macht? Ist das sowas wie Not? data and Not EN?
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Tutorial Arduino programmieren,

Beitrag von pluto »

Ich glaube ich habe den "Fehler" gefunden, wie ich es mir gedacht habe:

Code: Alles auswählen

 
procedure TLCD.write4Bits(Value: byte);
const
  ENABLE_MASK: byte = $04;
 
  procedure Sleep;
  var
    i: Integer;
  begin
    for i := 1 to 1000 do asm nop end;
  end;
 
begin
  TWIwriteByte(Device_Addr, Value or ENABLE_MASK or backlightStsMask);
  Sleep;
  TWIwriteByte(Device_Addr, (Value and not ENABLE_MASK) or backlightStsMask);
  Sleep;
end;   
 

So scheint es zu gehen.... 4 war einfach zu kurz...
MFG
Michael Springwald

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tutorial Arduino programmieren,

Beitrag von Mathias »

"data & ~En" Weiß jemand was das ~ hier macht? Ist das sowas wie Not? data and Not EN?
Das & ~ entspricht and not.
und | entspricht or

PS:
Ich habe geradeein Tutorial für SPI als Slave veröffentlicht: http://wiki.freepascal.org/AVR_Embedded ... I-Slave/de
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Tutorial Arduino programmieren,

Beitrag von pluto »

Nun, kann ich auch Datum und Uhrzeit auf dem LCD anzeigen.
Jedoch ohne Sekunden, die gingen aber bevor ich das mit dem LCD eingefügt habe...
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Tutorial Arduino programmieren,

Beitrag von pluto »

Offenbar lag es an zu vielen String Operationen, warum auch immer. Habe den Code angepasst und nun läuft es.
Auf dem LCD, ist nun das Datum und die Uhrzeit, sowie Temperatur und Luftfeuchtigkeit...
So ging es.... wenn ich nun 6 Strings verwende statt einen, gibt es Probleme.... Leider sehe ich nicht, wie viel Ram ich noch habe...Kann gut sein, dass es daran liegt.

Code: Alles auswählen

 
    Mylcd.setCursor(0,1 );
    str(rtcTime.mday,S);
    Mylcd.Write(S+'.');
 
    str(rtcTime.mon,S);
    Mylcd.Write(S+'.');
 
    str(rtcTime.year,S);
    Mylcd.Write(S);
 
    Mylcd.setCursor(0,2 );
 
    str(rtcTime.h,S);
    Mylcd.Write(S+':');
 
    str(rtcTime.m,S);
    Mylcd.Write(S+':');
 
    str(rtcTime.s,S);
    Mylcd.Write(S);
 
Dateianhänge
Es geht
Es geht
MFG
Michael Springwald

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tutorial Arduino programmieren,

Beitrag von Mathias »

@Pluto
So wie es scheint, hat es einen neune AVR-Lazarus Freund gegeben. 8) :wink:

@Alle
Wen etwas fehlerhaft im Tutorial ist, bitte melden, nur so kann man das Tutorial perfekter machen. :wink:
Bitte auch wen es nur Tippfehler sind oder man korrigiert diese selbst. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Tutorial Arduino programmieren,

Beitrag von pluto »

So wie es scheint, hat es einen neune AVR-Lazarus Freund gegeben.

Im Moment bin ich begeistert wie einfach das alles geht.... gut, es geht nur AVR und noch kein STM32 aber ich denke das wird nur eine Frage der Zeit sein....
Werde aufjedenfall weiter machen, habe hier noch einige AM2302(Misst auch Temperatur und Luftfeuchtigkeit) und DS18B20(Misst nur Temperatur)....
Spannend wird es bei den WS2812B werden.... oder auch bei den LCD'S.

Wen etwas fehlerhaft im Tutorial ist, bitte melden, nur so kann man das Tutorial perfekter machen

Schön wäre es, wenn du das delay Tutorial erweitern könntest.... so das auch im Sekunden Bereich gewartet werden kann. Für einige Sachen wäre es einfacher.
Aber Praktisch wäre auch sowas wie delay_mikros...

Bitte auch wen es nur Tippfehler sind oder man korrigiert diese selbst.

Da habe ich doch glatt eine Frage:
In der Übersicht zu den Tutorials hast stellst du im Thema Fragen z.b. "GPIO - Aus / Ein-gabe - Wie mache ich einen GPIO-Zugriff am AVR."
Warum kein ? am ende statt dem Punkt?
MFG
Michael Springwald

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tutorial Arduino programmieren,

Beitrag von Mathias »

In der Übersicht zu den Tutorials hast stellst du im Thema Fragen z.b. "GPIO - Aus / Ein-gabe - Wie mache ich einen GPIO-Zugriff am AVR."
Ich habe es korrigiert, isr es besser so ?

Schön wäre es, wenn du das delay Tutorial erweitern könntest.... so das auch im Sekunden Bereich gewartet werden kann. Für einige Sachen wäre es einfacher.

Stimmt im diesem Tutorial ist bei 255ms fertig.
Der einfachste weg wird sein, eine 2. Delay-Funktion, welche in einer Schleife das kleiner Delay aufruft.

Im Moment bin ich begeistert wie einfach das alles geht.... gut, es geht nur AVR und noch kein STM32 aber ich denke das wird nur eine Frage der Zeit sein....
Werde aufjedenfall weiter machen, habe hier noch einige AM2302(Misst auch Temperatur und Luftfeuchtigkeit) und DS18B20(Misst nur Temperatur)....
Spannend wird es bei den WS2812B werden.... oder auch bei den LCD'S.
Wen du diese Code veröffentlichst, kann ich schon ein Tutorial aus diesem machen, aber ich muss ischer sein, das sie funktionieren.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Tutorial Arduino programmieren,

Beitrag von pluto »

Ich habe es korrigiert, isr es besser so ?

Es gibt noch mehr Titel, wo im Titel eine Frage steht:
- Wie steuere ich Schieberegister an.
- Wie steuere ich den 16Bit-Wandler ADC1115 über I²C an.

Stimmt im diesem Tutorial ist bei 255ms fertig.
Der einfachste weg wird sein, eine 2. Delay-Funktion, welche in einer Schleife das kleiner Delay aufruft.

Habe ich mir auch schon überlegt: zwei wären dann ca 0,5 Sekunden ? 4 Wären dann 1 Sekunde?

Wen du diese Code veröffentlichst, kann ich schon ein Tutorial aus diesem machen, aber ich muss ischer sein, das sie funktionieren.

Das ist klar... bei mir klappt es aufjedenfall.... aber es ist immer gut, wenn er von mehr als einer Person getestet wurde... dann ist die Wahrscheinlichkeit größer das es auch klappt.
MFG
Michael Springwald

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tutorial Arduino programmieren,

Beitrag von Mathias »

Habe ich mir auch schon überlegt: zwei wären dann ca 0,5 Sekunden ? 4 Wären dann 1 Sekunde?
Ungefähr stimmt es.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Tutorial Arduino programmieren,

Beitrag von Timm Thaler »

Nicht ungefähr. Recht genau im Rahmen der Möglichkeiten.

Code: Alles auswählen

for k := 1 to 4 do begin
  delay_ms(250);
end;


War jetzt nicht so schwer, oder?

Code: Alles auswählen

delay_ms(250);
delay_ms(250);
delay_ms(250);
delay_ms(250);


Wie gesagt, ich finde sowas keine gute Idee, aber zur Not tut das.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Tutorial Arduino programmieren,

Beitrag von pluto »

Wie gesagt, ich finde sowas keine gute Idee, aber zur Not tut das.

Du siehst ja, wie schwer ich mich mit der "Timer" Lösung tue....
MFG
Michael Springwald

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Tutorial Arduino programmieren,

Beitrag von Timm Thaler »

Egal. Das kommt mit der Zeit.

Wenn ich mir mal alten Code von mir anschaue, da würde ich auch einiges heute anders schreiben. Ich hab am Anfang auch viel mit State Machine gemacht. Das fällt Dir aber auf die Füsse, wenn Du mal mehrere Sensoren, Display, Tasten ansprechen willst.

Ich stell demnächst mal ein Tutorial für eine "Multitasking" Umgebung auf.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tutorial Arduino programmieren,

Beitrag von Mathias »

Wenn ich mir mal alten Code von mir anschaue, da würde ich auch einiges heute anders schreiben.
Dies ist bei mir auch so, wen ich ältere Code von mir angucke, kann ich nur Kopf schütteln. :mrgreen:

Ich stell demnächst mal ein Tutorial für eine "Multitasking" Umgebung auf.
Meinst du auf einem AVR ?
Wie willst du dies machen, mit Timern ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Tutorial Arduino programmieren,

Beitrag von pluto »

Wie willst du dies machen, mit Timern ?

Sowas geht auch ohne Timer... Ich habe mal was ähnliches für den aTiny85 gemacht nur über Zeitschleifen.... das war dann quasi Multitasking...
MFG
Michael Springwald

Antworten