Plutos-AVR

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

Re: Plutos-AVR

Beitragvon pluto » 8. Sep 2018, 10:45 Re: Plutos-AVR

Falls du dich für die Programmierung von Microchip uP's in Pascal interessierst, Edsons PicPas ist ein weiteres interessantes Projekt:

Ich habe es mir angesehen, die Idee sieht nicht schlecht aus, gerade der untere Teil, wo RAM und sowas angezeigt wird. Es scheint aber nicht für die atMegas gedacht zu sein oder?
Auf den ersten Blick ist es wohl nur für Pic....
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6704
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon pluto » 8. Sep 2018, 10:49 Re: Plutos-AVR

if (t and $8000) then

Wie sieht sowas in Pascal aus ?

result:=-int16(t and $7FFF)

Das hier wird kompiliert.
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6704
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon mse » 8. Sep 2018, 10:58 Re: Plutos-AVR

pluto hat geschrieben:
if (t and $8000) then

Wie sieht sowas in Pascal aus ?

if t and $8000 <> 0 then
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon mse » 8. Sep 2018, 11:03 Re: Plutos-AVR

pluto hat geschrieben:Auf den ersten Blick ist es wohl nur für Pic....

AFAIK für PIC6x. Das sind auch praktische uP's. Ich weiss nicht ob Edson weitere Familien zu unterstützen plant.
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon pluto » 8. Sep 2018, 11:13 Re: Plutos-AVR

if t and $8000 <> 0 then

Prima danke!

Code: Alles auswählen
if (t == 0xFFFF) return NAN;

Wird hier ein Speicherübrlauf geprüft? Würde das in Pascal genauso aussehen wie oben?
if t and $FFFF = 0 then ? Edit: Die frage ist auch: Was für ein Rückgabe Wert NAN gibt es nicht... und -1 geht ja auch nicht.....

AFAIK für PIC6x. Das sind auch praktische uP's. Ich weiss nicht ob Edson weitere Familien zu unterstützen plant.

Gut zu wissen, dass es noch mehr Alternativen zu Arduino gibt.

Ich finde Arduino ist einfach einfacher, aber das wird natürlich auch erkauft durch weniger Speicher und sowas.
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6704
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon mse » 8. Sep 2018, 11:47 Re: Plutos-AVR

pluto hat geschrieben:
Code: Alles auswählen
if (t == 0xFFFF) return NAN;

Wird hier ein Speicherübrlauf geprüft? Würde das in Pascal genauso aussehen wie oben?
if t and $FFFF = 0 then ? Edit: Die frage ist auch: Was für ein Rückgabe Wert NAN gibt es nicht... und -1 geht ja auch nicht.....

Ich habe nicht alles gelesen. Ich vermute, dass 0xffff einen ungültigen Wert bezeichnet. NAN = "not a number".
Code: Alles auswählen
 
if t = $ffff then begin
 <wert für "ungültig" zurückgeben>
end;
 

AFAIK für PIC6x. Das sind auch praktische uP's. Ich weiss nicht ob Edson weitere Familien zu unterstützen plant.

Gut zu wissen, dass es noch mehr Alternativen zu Arduino gibt.

Ich finde Arduino ist einfach einfacher, aber das wird natürlich auch erkauft durch weniger Speicher und sowas.

Wenn du einfache und trotzdem leistungsfähige uP's magst dann bist du mit PIC16x gut bedient. Es ist unglaublich, was man damit mit den spärlichen Ressourcen erreichen kann.
Ich habe mal für einen PIC16F73
https://www.microchip.com/wwwproducts/en/PIC16F73
eine Motorsteuerung mit komplexem Ablauf inklusive Interpreter für ein in einer speziellen Sprache geschriebenen Programm im via I2C angeschlossenen EEPROM, verschiedenen angeschlossenen Sensoren, Infrarot-Fernsteuerung, RTC, verschiedene analoge und digitale Ein- und Ausgänge, ein serielles Busprotokoll usw. gemacht. Resourcen: 4096 Befehle und 192 Bytes RAM. Die Programmierung geschah allerdings in Assembler.
Oder ein DC-Motor Controller mit Software PWM, Drehzahl- und Drehmomentregler, Ablaufsteuerung, Eingangsphasen Messung zur Parallelschaltung mit Synchronmotoren usw. Mit PIC16C54
https://www.microchip.com/wwwproducts/en/PIC16C54
512 Befehle, 25 Byte RAM.
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon pluto » 8. Sep 2018, 12:04 Re: Plutos-AVR

Ich habe nicht alles gelesen. Ich vermute, dass 0xffff einen ungültigen Wert bezeichnet. NAN = "not a number".

Ja, dass ist auch meine Vermutung. Problem ist halt nur, was soll ich in diesenfall zurückgeben? Normalerweise würde ich ja -1 zurück geben. Das geht aber in diesenfall natürlich nicht.

Wenn du einfache und trotzdem leistungsfähige uP's magst dann bist du mit PIC16x gut bedient. Es ist unglaublich, was man damit mit den spärlichen Ressourcen erreichen kann.

Da fällt mir der Einstieg schwer, mir fällt ja schon der Einstig bei den STM32 schwer.

eine Motorsteuerung mit komplexem Ablauf inklusive Interpreter für ein in einer speziellen Sprache geschriebenen Programm im via I2C angeschlossenen EEPROM, verschiedenen angeschlossenen Sensoren, Infrarot-Fernsteuerung, RTC, verschiedene analoge und digitale Ein- und Ausgänge, ein serielles Busprotokoll usw. gemacht. Resourcen: 4096 Befehle und 192 Bytes RAM. Die Programmierung geschah allerdings in Assembler.

Gut, wenn ich bei AVR ASM verwenden würde, wäre es wohl auch deutlich kleiner.

Im Verein haben wir eine CNC Fräse, eine Uralte, dort steckt was vergleichbares wie der atMega8 und dort wurde eine echt komplexe "GUI" geschrieben, dabei ist die Fräse schon über 20 Jahre alt.

Oder ein DC-Motor Controller mit Software PWM, Drehzahl- und Drehmomentregler, Ablaufsteuerung, Eingangsphasen Messung zur Parallelschaltung mit Synchronmotoren usw. Mit PIC16C54

Wieder mit ASM?
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6704
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon pluto » 8. Sep 2018, 12:13 Re: Plutos-AVR

Ja, dass ist auch meine Vermutung. Problem ist halt nur, was soll ich in diesenfall zurückgeben? Normalerweise würde ich ja -1 zurück geben. Das geht aber in diesenfall natürlich nicht.

Ich habe noch mal darüber nach gedacht und sehe aktuell nur drei Lösungen:
1. Eine Globale Fehler Variable, die Entweder true oder false ist
2. Über ein Var Parameter
3. Über ein Record der zwei Variablen enthält, einmal den Value und einmal einen Fehlercode...

Ich glaube 1. wäre am Sinnvollsten in diesen Fall, was meint ihr?

Edit1:
Code: Alles auswählen
 
function TAVR_Sensor_Am2320.readTemp(): Int16;
var
  Temp_T:Int16;
begin
  Error:=false;
  Temp_T:=readRegister16(AM2320_REG_TEMP_H);
  if Temp_T = $fff then begin
    Error:=true;
    exit;
  end;
 
  if Temp_T and $8000 <> 0 then
    result:=-int16(Temp_T and $7FFF)
  else
    result:=Temp_T;
end;
 


Der C-Code sieht so aus:
Code: Alles auswählen
 
float Adafruit_AM2320::readTemperature() {
  uint16_t t = readRegister16(AM2320_REG_TEMP_H);
  float ft;
  if (t == 0xFFFF) return NAN;
  // check sign bit - the temperature MSB is signed , bit 0-15 are magnitude
  if(t & 0x8000){
    ft = -(int16_t)(t&0x7fff);
  }
  else {
    ft = (int16_t)t;
  }
  return ft / 10.0;
}
 
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6704
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon mse » 8. Sep 2018, 12:30 Re: Plutos-AVR

pluto hat geschrieben:Wieder mit ASM?

Natürlich.
Ja, dass ist auch meine Vermutung. Problem ist halt nur, was soll ich in diesenfall zurückgeben? Normalerweise würde ich ja -1 zurück geben. Das geht aber in diesenfall natürlich nicht

Definiere für NAN einen nie vorkommenden Integerwert, z.B. $8000 = -32768.
Oder gib den Fehlerzustand als Boolean zurück:
Code: Alles auswählen
 
function TAVR_Sensor_Am2320.readTemp(out avalue: int16): boolean;
                                                     //true if ok
 
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Mathias » 8. Sep 2018, 12:57 Re: Plutos-AVR

Du hast oben im Code fff geschrieben, ich denke du willst ffff.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon pluto » 8. Sep 2018, 13:35 Re: Plutos-AVR

im C Code sind jedoch auch 3 FFF vorhanden?
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6704
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon Mathias » 8. Sep 2018, 13:48 Re: Plutos-AVR

Ich sehe aber in der 4. Zeile 0xFFFF.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 8. Sep 2018, 13:49 Re: Plutos-AVR

pluto hat geschrieben:im C Code sind jedoch auch 3 FFF vorhanden?

Nein, "if (t == 0xFFFF) return NAN;".
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon pluto » 8. Sep 2018, 14:09 Re: Plutos-AVR

Stimmt, ich habe vorhin nur den unteren Teil gesehen, danke für den Hinweis....
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6704
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon pluto » 8. Sep 2018, 14:30 Re: Plutos-AVR

Nun habe ich die nächste Funktion übersetzt, die ich bisher ausgelassen habe, weil ich bisher nicht verstehe was da eigentlich genau passiert:
im C++ Code wird mit Pointern gearbeitet, ich habe darauf verzichtet....
Code: Alles auswählen
 
function TAVR_Sensor_Am2320.crc16(buffer: uInt8Array; nBytes: UInt8): UInt16;
var
  crc:UInt16 = $FFFF;
  b:UInt8;
  i,x:Integer;
begin
  for i:=0 to nBytes do begin
    b:=buffer[i];
    for x:=0 to 8 do begin
 
      if crc and $0001 <> 0 then begin
        crc:=crc shr 1;
        crc:=$A001;
      end
      else
        crc:=crc shr 1;
    end; // for x
  end; // for i
 
  result:=0;
 end;
 


Der C++ Code Sieht so aus
Code: Alles auswählen
 
/**************************************************************************/
/*!
    @brief  perfor a CRC check to verify data
    @param buffer the pointer to the data to check
    @param nbytes the number of bytes to calculate the CRC over
    @return the calculated CRC
*/

/**************************************************************************/
uint16_t Adafruit_AM2320::crc16(uint8_t *buffer, uint8_t nbytes) {
  uint16_t crc = 0xffff;
  for (int i=0; i<nbytes; i++) {
    uint8_t b = buffer[i];
    crc ^= b;
    for (int x=0; x<8; x++) {
      if (crc & 0x0001) {
   crc >>= 1;
   crc ^= 0xA001;
      } else {
   crc >>= 1;
      }
    }
  }
  return crc;
}
 


Mir geht es um zwei Dinge:
1. Ich möchte gerne verstehen, was da passiert
2. Ist mein Pascal Code richtig oder habe ich was übersehen oder falsch gemacht?

Edit: finde ich sehr Praktisch: http://wiki.freepascal.org/Pascal_for_C_users/de
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6704
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

» Weitere Beiträge siehe nächste Seite »
VorherigeNächste

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 7 Gäste

porpoises-institution
accuracy-worried